gpt4 book ai didi

java - 为什么没有 StrongReference 对象?

转载 作者:太空狗 更新时间:2023-10-29 22:41:23 26 4
gpt4 key购买 nike

我正在实现一些行为,这些行为有时可以从使用弱引用中获益。我希望该类的用户能够在构建时指出是否属于这种情况。由于 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com