【发布时间】:2017-04-18 15:50:43
【问题描述】:
我真的很喜欢在 Kotlin 中为接口使用默认实现,尤其是对于像 Observable 这样的常见模式。这是我的界面,
interface Observable<T>{
// How do I cache this?
val observers: MutableList<Observer<T>>
get() = LinkedList<>()
fun addObserver(o:Observer<T>){
observers.add(o)
}
fun removeObserver(o:Observer<T>){
observers.remove(o)
}
fun notifyObservers(u:T){
for (o in observers){
o.update(u)
}
}
}
接口引用observers的列表,但get()调用每次都返回一个新的LinkedList()。如何缓存 observers 的值,使其只创建一次?我试过使用kotlin-lazy,但要么语法不正确,要么不适合接口。我的 IDE 报错“接口中不允许使用委托属性。”
更新
根据 Yoav 的回答,我已将界面更改为
interface Observable<T>{
val observers: MutableList<Observer<T>>
}
然后在实现类中,
class MyObservable : Observable<String>
private val _observers = LinkedList<Observer<String>>()
override val observers: MutableList<Observer<String>>
get() = _observers
有什么技巧可以让这更简洁吗?
【问题讨论】:
标签: java kotlin observable