kotlin接口能缓存一个值吗?

我真的很喜欢在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抱怨“委托属性不允许在接口。”

UPDATE

基于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 

任何提示,使这更简洁?

根据Kotlin文档:

Kotlin中的接口与Java 8非常相似。它们可以包含抽象方法的声明以及方法实现。 与抽象类不同的是接口不能存储状态。

接口不能保持任何状态,因为它们是完全抽象的。 也许你应该使用abstract class来缓存值?

有关接口为无状态的原因的更多信息,请参阅此问题。

一个接口是一个契约,指明了它的实现者能够做的事情。 它不需要指定状态,因为状态是一个实现细节,只能用来约束实现者如何履行这个合同。 如果你想指定状态,你可能想重新考虑使用接口,而不是看抽象基类。