我有一个接口,我想要一个可以在类内修改但不在外面的属性.我不能使用val,因为它需要是可变的,并且var关键字不能有指定的私有setter,因为它在接口中.
在java中,我会这样做:
public <T> getMyProperty();
Run Code Online (Sandbox Code Playgroud)
我可以在kotlin中使用相同的方法,并直接编写getter函数,但这似乎不像kotlinlike方法.有没有比这更好的方法来实现?有趣的getMyProperty()
hot*_*key 16
在Kotlin中,你实际上override
可以val
用a var
,所以,我想,你想要的可以表达如下:
interface Iface {
val foo: Foo
}
Run Code Online (Sandbox Code Playgroud)
class Impl : Iface {
override var foo: Foo
get() = TODO()
private set(value) { TODO() }
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以val
使用带有支持字段和默认访问者的属性覆盖:
class ImplDefaultGetter : Iface {
override var foo: Foo = someFoo
private set
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,可变性和私有setter的存在都成为类的实现细节,并且不通过接口公开.
归档时间: |
|
查看次数: |
1511 次 |
最近记录: |