[英]Kotlin: Setting a private Boolean in Java class via a Data class in Kotlin. Why am I not able to do this?
我有一个Java类的格式:
class JavaClass {
private String name;
private Boolean x;
public String getName() { return name; }
public void setName(String name) { this.name = name }
public Boolean isX() { return x; }
public void setX(Boolean x) { this.x = x }
}
我将这个类重写为Kotlin中的一个Data类,格式如下:
data class KotlinClass(
var nameNew: String? = null,
var xNew: Boolean = false
): JavaClass() {
init {
name = nameNew
x = xNew
}
}
当我这样做时,这种名称初始化不会产生问题,但我不能以这种方式初始化x。 IDE抱怨x是不可见的。 为什么用x而不用名字?
我在Kotlin类中创建了一个新变量,其名称为x,带有自定义getter和setter,并且它抱怨了setter的意外覆盖(这是可以理解的)。 这意味着Java setter和getter在Data类中可见。 那么为什么setter没有在init块中用于x,就像它为名字做的那样?
这是因为Kotlin将Java getter和setter表示为属性 。 如果getter签名是T isSomething()
(而不是T getSomething()
),那么Kotlin属性也被命名为isSomething
(不仅仅是something
)。 在您的情况下, x = xNew
解析为私有字段访问。
您可以通过分配isX
来修复代码:
init {
name = nameNew
isX = xNew
}
或者,如果在Java代码x = xNew
isX()
重命名为getX()
,则x = xNew
赋值将起作用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.