- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在实现一些行为,这些行为有时可以从使用弱引用中获益。我希望该类的用户能够在构建时指出是否属于这种情况。由于 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
类,根据Reference javadocs :
Because reference objects are implemented in close cooperation with the garbage collector, this class may not be subclassed directly.
所以我无法创建我自己的 Reference 子类,该子类持有对该对象的强(即正常)引用。这似乎意味着不可能创建一个类来隐藏它是否使用来自调用者的弱(或软)引用。
我真的不明白为什么这个类不存在,StrongReference
对象应该总是从 get() 返回对象,除非调用了 clear()。为什么这个不见了? StrongReference
在某种程度上与 Reference
不一致吗?这将使构建通用引用持有者对象变得更加简单。
最佳答案
当我需要这样做时,我只是创建了一个自定义的 Reference 接口(interface)和一个 WeakReference 的普通子类。这很烦人,但它已经是你能做到的最好的了。
public interface MyReference<T> {
public T get();
}
public class MyWeakReference<T> extends WeakReference<T> implements MyReference<T> {
}
public class MyStrongReference<T> implements MyReference<T> {
// obvious implementation here ...
}
更新:
澄清一下,我不知道为什么这首先没有包含在 jdk 中(我也希望它包含在内),但是,我觉得这是一个合理的解决方法.
对于那些寻求证明这一想法的人来说,我发现在实现自定义缓存时有必要,其中引用的强度是缓存配置的一部分。
关于java - 为什么没有 StrongReference 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15651896/
我正在实现一些行为,这些行为有时可以从使用弱引用中获益。我希望该类的用户能够在构建时指出是否属于这种情况。由于 WeakReference 扩展了 Reference 乍一看我似乎可以做类似的事情(这
我声明了一个强引用- Data data = new Data(); 为了使其符合垃圾回收条件,我将实例设置为 null- data = null; 现在,当我将引用设置为 null 时,该对象将无法
我是一名优秀的程序员,十分优秀!