他のオブジェクトへのscala.ref.WeakReferenceを保持するcaseクラスをscalaで記述したいと思います。それがscalaで行われるためのベストプラクティスは何だろうか。
私はそれについていくつか考えました、そして最初のものはこれでした:
case class CC1(ref: Any) {
private val weakRef: WeakReference[Any] = WeakReference(ref)
def get: Any = weakRef()
}
しかし、scalaはCC1で、強力な参照を保持するrefのvalを自動的に生成するため、これは単純に機能しません。
私の2番目の考えは:
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 {
}
どのようにコードを書きますか?何を提案しますか?前もって感謝します!