什么是正确的方法来添加一个抽象的私人吸气和公共设置?
我有一个接口,我想要一个属性,可以在课堂上修改,但不是在外面。 我不能使用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的存在成为类的实现细节,并不通过接口暴露。