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