Java kotlin接口能否缓存值?

Java kotlin接口能否缓存值?,java,kotlin,observable,Java,Kotlin,Observable,我真的很喜欢对Kotlin中的接口使用默认实现,特别是对于像Observable这样的常见模式。这是我的界面 interface Observable<T>{ // How do I cache this? val observers: MutableList<Observer<T>> get() = LinkedList<>() fun addObserver(o:Observer<T>){

我真的很喜欢对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)
        }
    }

}
然后在实现类中

class MyObservable : Observable<String>

   private val _observers = LinkedList<Observer<String>>()

   override val observers: MutableList<Observer<String>>
       get() = _observers
类MyObservable:可观察
private val_observators=LinkedList()
覆盖val观察员:可变列表
获取()

根据Kotlin docs的说法,有什么建议可以让这更简洁吗?

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

接口不能保存任何状态,因为它们是完全抽象的。也许您应该使用
抽象类
来缓存这些值

有关接口无状态的原因的更多信息,请参见问题

接口是一种契约,指定其实现者承诺的内容 能够做到。它不需要指定状态,因为状态是 实现细节,仅用于约束实现者如何 本合同已履行。如果要指定状态,可以 想重新考虑一下接口的使用,看看抽象基础吗 改为上课


根据Kotlin文件:

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

接口不能保存任何状态,因为它们是完全抽象的。也许您应该使用
抽象类
来缓存这些值

有关接口无状态的原因的更多信息,请参见问题

接口是一种契约,指定其实现者承诺的内容 能够做到。它不需要指定状态,因为状态是 实现细节,仅用于约束实现者如何 本合同已履行。如果要指定状态,可以 想重新考虑一下接口的使用,看看抽象基础吗 改为上课


谢谢我更新了我的问题,以反映我的具体实施。如果您有任何建议,请随时补充。@AdamHughes为什么不干脆
覆盖val观察员:MutableList=LinkedList()
?为什么您需要一个显式的支持字段?另外,您可以将帮助函数保留在接口中,甚至更好:将它们声明为扩展方法:)Yoav,如果我设置
val observators=LinkedList()
,那么每次调用getter时这不会生成一个新的LinkedList()?我想重复使用这个列表。我将研究扩展方法,我不太熟悉你的建议(kotlin的新手)。不,只有当你使用getter语法
get()=LinkedList()
谢谢。我更新了我的问题,以反映我的具体实施。如果您有任何建议,请随时补充。@AdamHughes为什么不干脆
覆盖val观察员:MutableList=LinkedList()
?为什么您需要一个显式的支持字段?另外,您可以将帮助函数保留在接口中,甚至更好:将它们声明为扩展方法:)Yoav,如果我设置
val observators=LinkedList()
,那么每次调用getter时这不会生成一个新的LinkedList()?我想重复使用这个列表。我将研究扩展方法,我不太熟悉您的建议(kotlin的新手)。不,只有在您使用getter语法
get()=LinkedList()
class MyObservable : Observable<String>

   private val _observers = LinkedList<Observer<String>>()

   override val observers: MutableList<Observer<String>>
       get() = _observers