我收到了这个警告 这是代码:
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
答案 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<>();
在此示例中,不需要指定通用参数(String
和String
)。但是,如果您没有指定它们,则会收到您提到的警告。
有关详细信息,请参阅Hashtable javadoc和section 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>();