2

I'm getting this warning here is code:

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

warning: [unchecked] unchecked call to put(K,V) as a me mber of the raw type Hashtable

4

3 回答 3

4

Hashtable是泛型类型。您应该在使用时通过传递类型参数来使用相应的参数化类型。只使用类名Hashtable是原始类型,不鼓励使用,除非在某些地方,您必须使用它们。

因此,您可以将对象实例化为:

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

但是,您也应该避免使用Hashtable. 原因是,每个操作Hashtable都是同步的,你真的不需要。这不必要地使执行速度变慢。最好使用 aHashMap代替。你可以像这样使用它:

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

除此之外,您不需要使用 创建新String对象new String(...),同时将它们添加到地图中。只需使用字符串文字,以避免不必要的对象创建:

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

有关的:

于 2013-10-29T12:28:28.567 回答
0

Hashtable是具有两个泛型类型参数的泛型类。

尝试:

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

不需要指定泛型参数(StringString此示例中)。但是,如果您不指定它们,则会收到您提到的警告。

有关更多详细信息,请参阅Hashtable javadocoracle java 文档中有关泛型的部分

于 2013-10-29T12:26:36.243 回答
0

如果您要在声明 时使用泛型类型Hashtable,则警告将消失:

Hashtable<String, String>

或者更好的是,对接口进行编码:

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

也许您可以找到比 Map 更好的实现Hashtable,例如HashMap

Map<String, String> ns = new HashMap<String, String>();
于 2013-10-29T12:26:55.077 回答