0

我正在尝试构建一个字典缓存,其中包含传入键的弱引用作为索引,而不是原始键。
源代码如下 - 并指出编译失败的行。
我需要有关解决此错误的正确方法的帮助。

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);

    }
        ......
        ......
}
4

2 回答 2

0

这解决了这个问题:

public class ProxyWeakReference<K> extends WeakReference{

     int hashdata;

      public  ProxyWeakReference(K referent, ReferenceQueue<? super K> q) {
            super(referent, q);
            hashdata = referent.hashCode();
      }
于 2013-08-01T06:29:25.673 回答
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而不是。WeakReferenced

于 2013-08-01T06:16:45.030 回答