HashTable问题

dan*_*983 6 java hashtable java1.4 java-me

我有一个有趣的问题需要使用Hashtables; 我正在为S40诺基亚开发(合规级别为1.4)

我希望如何Hashtable工作:

Hashtable table = new Hashtable();
table.put(1, "Hello World");
Run Code Online (Sandbox Code Playgroud)

但是我得到错误:

put(Object, Object)类型中的方法Hashtable不适用于参数(int, String)

但是,当我创建一个对象引用并传递引用时,它工作正常!为什么?!

工作范例:

Hashtable table = new Hashtable();
Integer test = new Integer(1);
table.put(test, "Hello World");
Run Code Online (Sandbox Code Playgroud)

任何解释都会很棒!

Hon*_*dek 4

在我的回答中,我认为您的实际代码实际上如下:

Hashtable table = new Hashtable();
table.put(1, "Hello World");
Run Code Online (Sandbox Code Playgroud)

这就是导致您所描述的错误的代码,即

put(Object, Object)类型中的方法Hashtable不适用于参数(int, String)

原因是这样的:

  1. Java 1.4 不支持泛型,因此可以Hashtable简单地使用Objects(既作为键也作为值)

  2. Java 1.4 不支持自动装箱,因此代码table.put(1, "Hello World")不会自动自动装箱table.put(Integer.valueOf(1), "Hello World")。因此,您尝试调用table.put(int, String)与 不兼容的Hashtable.put(Object, Object).

瞧。

如果您使用 Java 1.5+,调用将自动装箱到table.put(Integer, String)

顺便说一句,不使用new Integer(1)总是更喜欢静态工厂方法 Integer.valueOf(1)。您可以避免不必要地创建冗余类。就是自动装箱被编译成的内容。请参阅:静态工厂方法与实例(普通)构造函数?