无法在Java中的一行上声明哈希表

时间:2016-01-12 14:15:27

标签: java generics

这有效:

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

这失败了:

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

出现此错误:

[javac] /home/me/code/SomeFile.java:10: error: ';' expected
[javac]       Hashtable myHT<String,String> = new Hashtable<String,String>();

这失败了:

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

错误:

[javac] /home/me/code/SomeFile.java:10: error: ';' expected
[javac]       Hashtable myHT<String,String>;

此外,行为不一致。在声明中声明和实例化的文件中有其他HashTables,在声明中使用泛型,它可以工作。发生了什么?

3 个答案:

答案 0 :(得分:7)

这有效:

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

这样做:

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

如果您使用Java7 +,您可以利用改进的类型推断功能,该功能允许在表达式的右侧省略type-parameter的显式设置:

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

通常,类型参数信息(<String, String>)应紧跟在类型(Hashtable)之后。这使得如下一个无效的片段

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

因为类型参数信息不在类型之后,而是在变量名之后。

答案 1 :(得分:3)

此: Hashtable myHT<String,String> = new Hashtable<String,String>();

应该是: Hashtable<String,String> myHT = new Hashtable<String,String>();

或者如果你想得到幻想: Hashtable<String,String> myHT = new Hashtable<>();

答案 2 :(得分:2)

这一行怎么样:

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