Kotlin - 我们如何使用getter和setter访问私有财产?访问方法是在内部调用吗?

时间:2018-04-25 05:45:00

标签: java android kotlin

 var sample1 = Sample1()

这是我的班级。我希望将该属性保密为私有,并且必须通过getter和setter访问该属性。

{{1}}

我尝试创建一个对象并访问该属性,但失败了。 当我浏览文档时,我发现了一件有趣的事情, “吸气剂总是与物业具有相同的能见度”。 link

使用kotlin的正确方法是什么?

1 个答案:

答案 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; }

}