2013-08-01 62 views
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); 

    } 
     ...... 
     ...... 
} 
+0

可能重複(http://stackoverflow.com/questions/529085/java-how-to-generic-array-創建) – IUnknown

回答

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

,或者你可以在d定義和實例使用ProxyWeakReference代替WeakReference

0

這解決了這個問題:

public class ProxyWeakReference<K> extends WeakReference{ 

    int hashdata; 

     public ProxyWeakReference(K referent, ReferenceQueue<? super K> q) { 
      super(referent, q); 
      hashdata = referent.hashCode(); 
     } 
【JAVA如何:通用陣列創建]的