首页 > 解决方案 > Kotlin - 我们如何使用 getter 和 setter 访问私有财产?访问方法是否在内部调用?

问题描述

class Sample1 {
private var test = ""
    get() = field
    set(value) {
        field = value
   }}

这是我的课。我想将该属性保持为私有,并且必须通过 getter 和 setter 访问该属性。

 var sample1 = Sample1()

我试图创建一个对象并访问该属性,但失败了。当我浏览文档时,我发现了一件有趣的事情,“Getters 总是与属性具有相同的可见性”。关联

kotlin 的正确方法是什么?

标签: javaandroidkotlin

解决方案


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

}

推荐阅读