什么是正确的方法来添加一个抽象的私人吸气和公共设置?

我有一个接口,我想要一个属性,可以在课堂上修改,但不是在外面。 我不能使用val,因为它需要是可变的,var关键字不能有一个指定的私人setter,因为这是在一个接口。

在Java中我会做到这一点:

public <T> getMyProperty(); 

我可以在kotlin中使用相同的方法,直接编写getter函数,但是这看起来不像kotlinlike的方法。 有没有更好的办法达到这一点? getMyProperty()

在Kotlin中,你实际上override用一个var override val ,所以我想,你想要的可以表达如下:

 interface Iface { val foo: Foo } 

 class Impl : Iface { override var foo: Foo get() = TODO() private set(value) { TODO() } } 

或者,您可以使用具有后台字段和默认访问器的属性来覆盖val

 class ImplDefaultGetter : Iface { override var foo: Foo = someFoo private set } 

在这两种情况下,可变性和私有setter的存在成为类的实现细节,并不通过接口暴露。