显然,我无法在哈希表中存储Long值。
请参见下面的代码:
//create a hashtable of type <String, Long>
Hashtable <String, Long> universalTable = new Hashtable <String, Long> ();
universalTable.put("HEADS", new Long(0)); // this works fine
我将此表传递给
DoFlip
的构造函数:DoFlip doFlip = new DoFlip(100000000, universalTable);
内
DoFlip
:Hashtable table; // pointer to hash map
long iterations = 0; // number of iterations
DoFlip(long iterations, Hashtable table){
this.iterations = iterations;
this.table = table;
}
此类实现Runnable。
run()
方法如下:public void run(){
while(this.iterations > 0){
// do some stuff
this.heads ++;
this.iterations --;
}
updateStats();
}
public void updateStats(){
Long nHeads = (Long)this.table.get("HEADS");
this.table.put("HEADS", nHeads); // ISSUE HERE
}
我收到以下警告/错误。看起来像是警告,但我不希望这样。
Note: File.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
当我重新编译时:
File.java:92: warning: [unchecked] unchecked call to put(K,V) as a member of the raw type java.util.Hashtable
this.table.put("HEADS", nHeads);
^
1 warning
我不确定为什么会这样。首先,不需要键入强制转换
nHeads
。但是我仍然这样做,并且不起作用。注意:我一点都不擅长Java。 :/
谢谢您的帮助。
最佳答案
此警告表明您正在使用原始类型。更换
DoFlip(long iterations, Hashtable table){
与
DoFlip(long iterations, Hashtable<String, Long> table) {
这样它包含类似于
universalTable
的泛型。还应在初始声明中包含泛型。边注:
Hashtable
是一个相当老的Collection
,并已由HashMap
代替。