Kotlin:只有吸气剂的私人可变财产

时间:2018-08-29 11:47:05

标签: java kotlin

我对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的选项,因为似乎属性及其获取方法/设置方法应具有相同的可见性范围...

3 个答案:

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

specified in their documentation

答案 2 :(得分:2)

在科特林,您的课程将是:

class Foo {
    var number = 0
        get
        private set

    fun increment() {
        number++
    }
}

Getter是公开的(但无论如何都是隐式创建的,因此实际上我们可以将其删除),而setter是私有的。