2013-10-29 104 views
2

我得到這個警告 這裏是代碼:Hashtable的原始類型

Hashtable nu=new Hashtable(); 
Hashtable ns=new Hashtable(); 
nu.put(new String("postmaster"),new String("admin")); 
ns.put(new String("SMTP"),new String("")); 
ns.put(new String("POP3"),new String("")); 
ns.put(new String("EMAIL"),new String("")); 
ns.put(new String("USER"),new String("")); 
ns.put(new String("PASS"),new String("")); 

警告:[選中]選中調用put(K,V)作爲原始類型的Hashtable的我 MBER

+0

需要使用泛型 – upog

回答

0

Hashtable是一個具有兩個泛型類型參數的泛型類。

嘗試:

Hashtable<String, String> nu = new Hashtable<>(); 

它不需要指定泛型參數(在這個例子中StringString)。但是,如果您不指定它們,則會收到您提到的警告。

有關更多詳細信息,請參閱Hashtable javadocsection about generics in the oracle java documentation

0

如果要聲明Hashtable時使用泛型類型,警告將消失:

Hashtable<String, String> 

甚至更​​好,代碼的接口:

Map<String, String> ns = new Hashtable<String, String>(); 

也許你可以找到比Hashtable更好的實現,比如HashMap

Map<String, String> ns = new HashMap<String, String>(); 
4

Hashtable是一種通用類型。在使用類型參數時,應該使用相應的參數化類型。只使用類名Hashtable是原始類型,並且不鼓勵,除非在某些地方,您必須使用它們。

所以,你會實例化對象爲:

Hashtable<String, String> nu = new Hashtable<String, String>(); 

但是,你也應該避免使用Hashtable。原因是,Hashtable的每一個操作都是同步的,你真的不需要。這不必要地使執行緩慢。最好使用HashMap代替。您可以使用它像這樣:

Map<String, String> map = new HashMap<String, String>(); 
Map<String, String> map2 = new HashMap<>(); // Valid from Java 7 onwards 

除此之外,您不需要創建使用new String(...)String對象,而將其添加到地圖中。只要使用字符串常量,所以當t避免不必要的對象創建:

nu.put("postmaster", "admin"); // Will work fine 

相關:

+0

你肯定會減少不必要的如果我們使用'nu來創建對象。put(「postmaster」,「admin」);'而不是'nu.put(new String(「postmaster」),new String(「admin」));'' –

+0

@YegoshinMaxim是的。字符串文字由Java實現。因此,對於相同String字符串的每個用法,將使用存儲在String常量池中的引用,而不是在堆中創建新的String對象。 –

+0

爲什麼Map map = new HashMap (); 而不是HashMap map = new HashMap (); –