我是 Kotlin 的新手,正在尝试将一个项目从 Java 迁移到它。我对 Kotlin 的属性和它们的 getter/setter 以及可见性范围感到有点困惑。
我想实现的是:
public class Foo {
private int number;
public int getNumber() {
return number;
}
public void increment() {
number++;
}
}
所以基本上我需要创建一个具有私有(private)属性 number
的类。这个属性应该可以被 public getter 访问,但是它不应该有一个 setter。此外,此属性应该是内部可变的,以便可以使用 increment()
等方法更改其值。
据我所知,我不能将它声明为 val
,因为在那种情况下,它是完全不可变的,即使是在类的实例中,所以我不能增加它。看起来应该是 var
。但是后来我没有看到使属性本身成为 private
并将此属性的 getter 设为 public
的选项,因为看起来属性及其 getters/setters应该具有相同的可见范围...
最佳答案
如果您使用 Intellij,您只需将代码粘贴到 Kotlin 类中,就会收到以下内容:
class Foo {
var number: Int = 0
private set
fun increment() {
number++
}
}
这基本上也是您问题的答案...
private set
表示 setter 仅私下可见。因此您可以在 Foo
中访问它,但不能从外部访问它。您显式设置的 0
(与 Java 不同)。然后:默认情况下属性和函数是public
。
同时检查 Kotlin reference regarding properties (specifically getter/setter)
关于java - Kotlin:只有 getter 的私有(private)可变属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52076700/