我有以下Java类:

public class JavaClass {

    private String nullableJavaField;

    @Nullable public String getNullableJavaField() {
        return nullableJavaField;
    }

    public void setNullableJavaField(@NotNull String nullableJavaField) {
        this.nullableJavaField = nullableJavaField;
    }
}

目的是nullableJavaField最初可能为null,但是任何后续的set操作都应仅具有非null值。从另一个Java类调用时,它可以按预期工作:
JavaClass jv = new JavaClass();
jv.setNullableJavaField(null); // Produces warning about passing null parameter

但是,等效的Kotlin代码会产生错误“无法重新分配Val”:
val jv = JavaClass()
jv.nullableJavaField = "Foo" // Produces error "Val cannot be reassigned"

据我所知,nullableJavaField不是最终的,那么Kotlin为什么抱怨分配给val?我已经搜索了类似的问题,例如thisthis,但是找不到答案。

最佳答案

对于Kotlin而言,这不是可变属性。 setNullableJavaField需要String,而getNullableJavaField返回String?nullableJavaField。因此,您必须直接使用 setter 。

val jv = JavaClass()
jv.setNullableJavaField("Foo")

关于java - 在Kotlin中将Java字段与@NotNull setter和@Nullable getter一起使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58948100/

10-10 13:36