class Sample1 {
private var test = ""
get() = field
set(value) {
field = value
}}
这是我的课。我想将该属性保持为私有(private),并且必须通过 getter 和 setter 访问该属性。
var sample1 = Sample1()
我试图创建一个对象并访问该属性,但失败了。
当我浏览文档时,我发现了一件有趣的事情,
“Getters 始终具有与属性相同的可见性”。 link
使用 kotlin 的正确方法是什么?
Kotlin 将一个字段、它的 getter 和它的 setter(如果适用)组合到属性的单一概念中。当您访问一个属性时,您总是调用它的 getter 和 setter,只是使用更简单的语法,这恰好与访问 Java 中的字段相同。但是支持属性的实际字段是私有(private)的,所有调用都通过 getter 和 setter,它们与属性本身具有相同的可见性,在您的例子中,private
。所以你的课会翻译成这样:
public final class Sample1 {
private String test = "";
private String getTest() { return test; }
private void setTest(String test) { this.test = test; }
}
您对 Sample1().text
的调用在 Java 中看起来像这样(您实际上可以从调用此 Kotlin 类的 Java 代码中执行此操作):
new Sample1().getText();
要说的是,解决方案是将属性的可见性更改为您在 Java 中设置的 getter 和 setter 可见性,例如,更改为默认的公共(public)可见性:
class Sample1 {
var test = ""
get() = field
set(value) {
field = value
}
}
请注意,如果您没有显式声明 getter 和 setter,您将自动获得与上述实现相同的功能,因此您可以将代码缩短为:
class Sample1 {
var test = ""
}
这个最终代码等同于这个 Java 类:
public final class Sample1 {
private String test = "";
public String getTest() { return test; }
public void setTest(String test) { this.test = test; }
}