在本地定义的Hashtable上执行操作时,分配给本地Hashtable的另一个类的全局Hashtable也会对其执行这些操作。我不确定这是否是一个显而易见的简单问题,但我找不到任何问题。
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;
}
}
这是功能。所有带有&#34; m _&#34; - 的变量都是全局变量。此方法采用字符串数组和散列表,并删除具有字符串数组的第一项的键的散列表项。问题是全局哈希表(m_HomeFrame.m_Tree.h_entityTable)一碰到就会更新(htEntities.remove(sNewEntity [0]);)。有没有办法将htEntities与全局变量分离? 另外,对于不使用泛型而道歉。我经常在搜索哈希表时看到它。
答案 0 :(得分:4)
当您传入h
时,您并未传递实际的HashTable
对象。您正在传递对HashTable
对象的引用。这意味着当您对h
进行更改时,您将对同一个对象进行更改。
解决此问题的方法是使用new
关键字。这将强制Java运行时创建一个新的HashTable
对象。