var sample1 = Sample1()
这是我的班级。我希望将该属性保密为私有,并且必须通过getter和setter访问该属性。
{{1}}
我尝试创建一个对象并访问该属性,但失败了。 当我浏览文档时,我发现了一件有趣的事情, “吸气剂总是与物业具有相同的能见度”。 link
使用kotlin的正确方法是什么?
答案 0 :(得分:4)
Kotlin将一个字段,它的getter和它的setter(如果适用)组合成一个属性的单个概念。当您访问属性时,您总是使用更简单的语法调用其getter和setter,这恰好与访问Java中的字段相同。但支持该属性的实际字段是私有的,并且所有调用都通过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可见性的任何内容,例如,更改为默认的公共可见性:
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; }
}