Я хочу написать класс case в scala, который содержит scala.ref.WeakReference для какого-либо другого объекта. Интересно, что лучше всего сделать в scala?
У меня было несколько мыслей по этому поводу, и первая была такая:
case class CC1(ref: Any) {
private val weakRef: WeakReference[Any] = WeakReference(ref)
def get: Any = weakRef()
}
Но это просто не работает, потому что scala автоматически сгенерирует в CC1 значение val для ref, которое содержит сильную ссылку.
Моя вторая мысль была:
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 {
}
Как бы вы написали код? Что бы вы посоветовали, пожалуйста? Заранее спасибо!