显然,我无法在哈希表中存储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代替。

10-08 20:22