首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hashtable原始类型

Hashtable原始类型
EN

Stack Overflow用户
提问于 2013-10-29 12:23:58
回答 3查看 5.6K关注 0票数 2

我收到这个警告,这是代码:

代码语言:javascript
复制
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的me

EN

回答 3

Stack Overflow用户

发布于 2013-10-29 12:28:28

Hashtable是一个泛型类型。在使用类型参数时,应传递类型参数,从而使用相应的参数类型。只使用类名Hashtable是原始类型,并且不鼓励使用,除非在某些地方必须使用它们。

因此,您将实例化对象如下:

代码语言:javascript
复制
Hashtable<String, String> nu = new Hashtable<String, String>();

但是,您也应该避免使用Hashtable。原因是,Hashtable的每一个操作都是同步的,这是您真正不需要的。这就不必要地让执行缓慢了。最好用HashMap代替。你可以这样使用它:

代码语言:javascript
复制
Map<String, String> map = new HashMap<String, String>();
Map<String, String> map2 = new HashMap<>();   // Valid from Java 7 onwards

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

代码语言:javascript
复制
nu.put("postmaster", "admin");  // Will work fine

相关:

票数 4
EN

Stack Overflow用户

发布于 2013-10-29 12:26:36

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

尝试:

代码语言:javascript
复制
Hashtable<String, String> nu = new Hashtable<>();

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

有关更多细节,请参见Hashtable javadoc关于oracle java文档中泛型的一节。

票数 0
EN

Stack Overflow用户

发布于 2013-10-29 12:26:55

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

代码语言:javascript
复制
Hashtable<String, String>

或者更好的是,编写接口代码:

代码语言:javascript
复制
Map<String, String> ns = new Hashtable<String, String>();

也许您可以找到一个比Hashtable更好的地图实现,例如HashMap

代码语言:javascript
复制
Map<String, String> ns = new HashMap<String, String>();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19658126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档