我对Kotlin还是陌生的,他试图将一个项目从Java迁移到它。我对Kotlin的属性,它们的获取器/设置器以及可见性范围感到有些困惑。
我想要实现的是:
public class Foo {
private int number;
public int getNumber() {
return number;
}
public void increment() {
number++;
}
}
因此,基本上,我需要创建一个具有私有属性number
的类。此属性应可由公共获取者访问,但不应具有setter。另外,此属性应在内部可变,以便可以使用诸如increment()
之类的方法来更改其值。
据我了解,我无法将其声明为val
,因为在那种情况下,即使在类的实例中,它也将是完全不可变的,因此我无法对其进行递增。看起来应该是var
。但是然后我看不到将属性本身设为private
并将该属性的获取方法设为public
的选项,因为似乎属性及其获取方法/设置方法应具有相同的可见性范围...
答案 0 :(得分:2)
如果使用Intellij,则可以将代码粘贴到Kotlin类中,并且会收到以下内容:
class Foo {
var number: Int = 0
private set
fun increment() {
number++
}
}
这基本上也是您问题的答案...
private set
告诉该设置者仅在私人可见。因此,您可以在Foo
中访问它,但不能从外部访问它。您显式设置的0
(与Java相反)。然后:默认情况下,属性和函数为public
。
还要检查Kotlin reference regarding properties (specifically getter/setter)
答案 1 :(得分:2)
我也是kotlin的新手,看来这是通过以下方式完成的:
var myVar = myFunction({
property: 'prop',
functionProperty() {
console.log(this.property);
},
functionProperty2() {
this.functionProperty();
}
});
答案 2 :(得分:2)
在科特林,您的课程将是:
class Foo {
var number = 0
get
private set
fun increment() {
number++
}
}
Getter是公开的(但无论如何都是隐式创建的,因此实际上我们可以将其删除),而setter是私有的。