[英]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.