解析依赖类中的泛型参数

时间:2013-08-01 05:44:02

标签: java generics

我正在尝试构建一个字典缓存,其中包含传入密钥的弱引用作为索引,而不是原始密钥。
来源低于 - 并指出了编辑失败的行 我需要帮助以正确的方式解决此错误。

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

    }
        ......
        ......
}

2 个答案:

答案 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();
      }