我正在尝试构建一个字典缓存,其中包含传入密钥的弱引用作为索引,而不是原始密钥。
来源低于 - 并指出了编辑失败的行
我需要帮助以正确的方式解决此错误。
public class ProxyWeakReference extends WeakReference{
public ProxyWeakReference(Object o, ReferenceQueue q)
{
super(o,q);
........
}
}
public class SafeQueueMap<K,V>{
ConcurrentMap<WeakReference<K>,V> d=new ConcurrentHashMap<ProxyWeakReference<K>,V>();
ReferenceQueue refQueue=new ReferenceQueue();
public void put(K k ,V v){
WeakReference<K> r=new ProxyWeakReference(k,refQueue);<==FAILS ON GENERIC PARAMETER
d.put(r,v);
}
......
......
}
答案 0 :(得分:0)
我无法编译指令new ConcurrentHashMap<ProxyWeakReference<K>,V>();
!
为什么不使用完整的泛型用于ProxyWeakReference而不是混乱?您可以解决所有错误并编写“正确”的代码。
public class ProxyWeakReference<K> extends WeakReference<K>{
public ProxyWeakReference(K o, ReferenceQueue<K> q)
{
super(o,q);
}
}
public class SafeQueueMap<K,V>{
ConcurrentMap<WeakReference<K>,V> d=new ConcurrentHashMap<WeakReference<K>, V>();
ReferenceQueue<K> refQueue=new ReferenceQueue<K>();
public void put(K k ,V v){
WeakReference<K> r=new ProxyWeakReference<K>(k,refQueue);
d.put((ProxyWeakReference<K>) r,v);
}
}
或者您可以在ProxyWeakReference
定义和实例化中使用WeakReference
代替d
。
答案 1 :(得分:0)
这解决了这个问题:
public class ProxyWeakReference<K> extends WeakReference{
int hashdata;
public ProxyWeakReference(K referent, ReferenceQueue<? super K> q) {
super(referent, q);
hashdata = referent.hashCode();
}