Hashtable原始类型

时间:2013-10-29 12:23:58

标签: java 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(""));
  

警告:[未选中]未经检查的调用将(K,V)作为我   原始类型Hashtable的mber

3 个答案:

答案 0 :(得分: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

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

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

相关:

答案 1 :(得分:0)

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

尝试:

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

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

有关详细信息,请参阅Hashtable javadocsection about generics in the oracle java documentation

答案 2 :(得分:0)

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

Hashtable<String, String>

甚至更好,代码接口:

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

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

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