java - Kotlin - 我们如何使用 getter 和 setter 访问私有财产?访问方法是否在内部调用?
问题描述
class Sample1 {
private var test = ""
get() = field
set(value) {
field = value
}}
这是我的课。我想将该属性保持为私有,并且必须通过 getter 和 setter 访问该属性。
var sample1 = Sample1()
我试图创建一个对象并访问该属性,但失败了。当我浏览文档时,我发现了一件有趣的事情,“Getters 总是与属性具有相同的可见性”。关联
kotlin 的正确方法是什么?
解决方案
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; }
}