我正在实现一些行为,这些行为有时可以从使用弱引用中受益。我希望班级的用户能够在施工时指出是否是这种情况。由于乍一看WeakReference
扩展,我似乎可以做类似的事情(这是一个模型,而不是我真正想要做的事情):Reference
public class Container<T> {
private boolean useWeakRef;
private Reference<T> ref;
public Container(boolean isWeak) {
useWeakRef = isWeak;
}
public void store(T val) {
if(useWeakRef) {
ref = new WeakReference<>(val);
} else {
ref = new StrongReference<>(val);
}
}
// May return null
public T get() {
return ref.get();
}
}
但是没有StrongReference
类,并且根据参考 javadocs:
因为引用对象是与垃圾收集器密切合作实现的,所以这个类不能直接子类化。
所以我不能创建我自己的引用子类来持有对对象的强(即正常)引用。这似乎意味着不可能创建一个隐藏它是否使用来自调用者的弱(或软)引用的类。
我真的不明白为什么这个类不存在,一个StrongReference
对象应该总是简单地从 get() 返回对象,除非 clear() 已被调用。为什么这个不见了?在某种程度上是StrongReference
不一致的吗?Reference
这将使构建通用引用持有者对象变得更加简单。