Kotlin:通过 Kotlin 中的数据 class 在 Java class 中设置私有布尔值。为什么我不能这样做?
Kotlin: Setting a private Boolean in Java class via a Data class in Kotlin. Why am I not able to do this?
我有一个 Java class 的格式:
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 }
}
我正在将此 class 覆盖为 Kotlin 中的数据 class,其格式为:
data class KotlinClass(
var nameNew: String? = null,
var xNew: Boolean = false
): JavaClass() {
init {
name = nameNew
x = xNew
}
}
当我这样做的时候,用这种方式初始化名称没有问题,但是我不能用这种方式初始化x。 IDE 抱怨 x 是不可见的。 为什么用 x 而不是 name?
我在 Kotlin class 中创建了一个名为 x 的新变量,带有自定义 getter 和 setter,它抱怨 setter 的意外覆盖(这是可以理解的。)。这意味着 Java setter 和 getter 在数据 class 中可见。那么为什么 setter 没有像在 name 中那样在 init 块中用于 x?
这是因为 。如果 getter 签名是 T isSomething()
(而不是 T getSomething()
),那么 Kotlin 属性 也被命名为 isSomething
(不仅仅是 something
) .在您的情况下,x = xNew
解析为私有字段访问权限。
您可以通过分配 isX
来修复您的代码:
init {
name = nameNew
isX = xNew
}
或者,如果您在 Java 代码中将 isX()
重命名为 getX()
,那么您的 x = xNew
作业将起作用。
我有一个 Java class 的格式:
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 }
}
我正在将此 class 覆盖为 Kotlin 中的数据 class,其格式为:
data class KotlinClass(
var nameNew: String? = null,
var xNew: Boolean = false
): JavaClass() {
init {
name = nameNew
x = xNew
}
}
当我这样做的时候,用这种方式初始化名称没有问题,但是我不能用这种方式初始化x。 IDE 抱怨 x 是不可见的。 为什么用 x 而不是 name?
我在 Kotlin class 中创建了一个名为 x 的新变量,带有自定义 getter 和 setter,它抱怨 setter 的意外覆盖(这是可以理解的。)。这意味着 Java setter 和 getter 在数据 class 中可见。那么为什么 setter 没有像在 name 中那样在 init 块中用于 x?
这是因为 T isSomething()
(而不是 T getSomething()
),那么 Kotlin 属性 也被命名为 isSomething
(不仅仅是 something
) .在您的情况下,x = xNew
解析为私有字段访问权限。
您可以通过分配 isX
来修复您的代码:
init {
name = nameNew
isX = xNew
}
或者,如果您在 Java 代码中将 isX()
重命名为 getX()
,那么您的 x = xNew
作业将起作用。