Java kotlin接口能否缓存值?
我真的很喜欢对Kotlin中的接口使用默认实现,特别是对于像Observable这样的常见模式。这是我的界面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>){
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