【发布时间】:2012-10-20 14:19:33
【问题描述】:
我想在 scala 中编写一个案例类,其中包含对其他对象的 scala.ref.WeakReference。我想知道在 scala 中做这件事的最佳实践是什么。
我对此有一些想法,第一个想法是这样的:
case class CC1(ref: Any) {
private val weakRef: WeakReference[Any] = WeakReference(ref)
def get: Any = weakRef()
}
但这根本行不通,因为 scala 会在 CC1 中自动为 ref 生成一个具有强引用的 val。
我的第二个想法是:
case class CC2(private val weakRef: WeakReference[Any]) {
def get: Any = weakRef()
}
效果很好。但是,它在代码重用方面不是很友好——如果 weakRef 和 get 来自这样的基类/特征怎么办:
trait T3 {
protected var weakRef: WeakReference[Any] = null
def get: Any = if(weakRef != null) weakRef() else null
}
case class CC3(/* how should I initialize weakRef in T3 */) extends T3 {
}
您将如何编写代码?请问你有什么建议?提前致谢!
【问题讨论】:
标签: scala weak-references case-class