我想在 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 {
}
你会怎么写代码?请问你有什么建议?提前致谢!