在对本地定义的哈希表执行操作时,已分配给本地哈希表的另一个类的全局哈希表也对其执行了这些操作。 我不确定这是否应该是一个简单的问题,但是我找不到任何问题。

public void redraw(String[] sNewEntity,Hashtable<String,Entity> h){
    Hashtable<String,Entity> htEntities=h;

    htEntities.remove(sNewEntity[0]);
    //many lines of code that ensures that the removal doesn't invalidate anything
    if(validation==true){
        m_HomeFrame.graph=new mxGraph();
        m_HomeFrame.myGraphComponent = new mxGraphComponent(m_HomeFrame.graph);        
        m_HomeFrame.setScroll(m_HomeFrame.myGraphComponent);
        m_HomeFrame.m_Tree.h_entityTable=htEntities;
    }
}

这就是功能。 所有带有“ m _”-的变量都是全局变量。 此方法采用字符串数组和哈希表,并删除哈希表中具有字符串数组第一项关键字的项。 问题在于,全局哈希表(m_HomeFrame.m_Tree.h_entityTable)一旦命中(htEntities.remove(sNewEntity [0]);),就会更新。 有没有办法将htEntities与全局变量分离? 此外,对于未使用泛型的歉意。 在搜索哈希表内容时,我经常看到这一点。

===============>>#1 票数:4

传入h ,您没有传入实际的HashTable对象。 您正在传递对HashTable对象的引用。 这意味着,当您更改h ,您是在更改同一对象。

解决此问题的方法是使用new关键字。 这将强制Java运行时创建一个新的HashTable对象。

  ask by Zipher200 translate from so

未解决问题?本站智能推荐: