我有以下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?我已经搜索了类似的问题,例如this和this,但是找不到答案。
最佳答案
对于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/