我有一个接口,我想要一个可以在类内修改但不在外面的属性 . 我不能使用val,因为它需要是可变的,并且var关键字不能有指定的私有setter,因为它在接口中 .
在java中,我会这样做:
public <T> getMyProperty();
我可以在kotlin中使用相同的方法,并直接编写getter函数,但这似乎不像kotlinlike方法 . 有没有比这更好的方法来实现?有趣的getMyProperty()
在Kotlin中,您实际上 override val 与 var ,所以,我认为,您想要的可以表达如下:
override
val
var
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的存在都成为类的实现细节,并且不通过接口公开 .
1 回答
在Kotlin中,您实际上
override
val
与var
,所以,我认为,您想要的可以表达如下:或者,您可以使用具有支持字段和默认访问者的属性覆盖
val
:在这两种情况下,可变性和私有setter的存在都成为类的实现细节,并且不通过接口公开 .