java - Kotlin - 我们如何使用 getter 和 setter 访问私有(private)属性(property)?访问方法是否在内部调用?

标签 java android kotlin

<分区>

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

}

关于java - Kotlin - 我们如何使用 getter 和 setter 访问私有(private)属性(property)?访问方法是否在内部调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50014794/

相关文章:

android - 由于超时,应用程序无法在模拟器上启动

mockito - 在 Kotlin 函数上使用 Mokito anyObject() 时,指定为非 null 的参数为 null

java - 有没有更好的方法来处理此方法中的逻辑条件?

java - 如何以编程方式在我的 Java 应用程序中运行所有 JUnit 测试?

android - 将 KeyEvent 对象列表转换为字符串

java - Android kotlin - 取消画廊选择时应用程序停止工作

android - Kotlin (Android) - 为非可变函数传播一个数组/列表

Java - 为什么此输入不生成 ClassNotFoundException

java - 使用哪些 Swing 组件

java - 分号、括号和大括号问题