2010-07-19 47 views
4

我正在使用HashMap,下面的方法顯示了跟蹤類類型的更改偵聽器。 IDE發出警告類對象的通用類型規範

[rawtypes] found raw type: java.lang.Class 
    missing type parameters for generic class java.lang.Class<T>. 

什麼類型需要指定類來解決警告?

private HashMap<Class, Set<ChangeListener>> classChangeListeners; 

/** 
* Adds a ChangeListener to the listener list for the specified class type. The class type 
* specified must be a subclass of {@link BusinessObject}. 
* 
* @param <T> the type of BusinessObject. 
* @param cls the class type. 
* @param listener the ChangeListener to be added. 
*/ 
public <T extends BusinessObject> void addChangeListener(Class<T> cls, ChangeListener listener) 
{ 
if (!classChangeListeners.containsKey(cls)) 
{ 
    classChangeListeners.put(cls, new TreeSet<ChangeListener>()); 
} 

classChangeListeners.get(cls).add(listener); 
} 

回答

5

如果你不小心指定您正在使用的特定Class ES的類型,你可以使用Class<?>代替raw typeClass

在你想通配符它,Class<? extends BusinessObject>或參數化它,Class<T>某些情況下 - 但通常Class<?>就足夠了,而且很難推斷出你真正從一小段想要什麼。

此外,它看起來像你正在使用包含集合的地圖。您可以使用內置此功能的Multimap進行研究,並使其更好地工作。

+0

從你的代碼看起來,顯然Class <?擴展BusinessObject>將是最合適的。 – 2010-07-19 15:20:52

+0

只要該方法記錄的不變量實際上適用於Map本身(它沒有明確記錄),我同意...... – 2010-07-19 15:22:32

+0

我想這取決於ChangeListener可以處理什麼。如果它只能處理BusinessObjects,那麼我會選擇Carl的建議。如果沒關係,我會寫類。 (一般來說,我更喜歡而不是在數據結構中,因爲它清楚地表明我們在類型層次結構中工作,但類意味着我們不想要的特定事物。) – 2010-07-19 15:39:26