在对本地定义的 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;
}
}
这是函数。所有带有“m_”的变量都是全局变量。此方法采用字符串数组和哈希表,并删除哈希表中具有字符串数组第一项的键的项。问题是全局哈希表 (m_HomeFrame.m_Tree.h_entityTable) 一旦命中 (htEntities.remove(sNewEntity[0]);) 就会更新。有没有办法解除 htEntities 与全局变量的关联? 另外,很抱歉没有使用泛型。我在搜索哈希表内容时经常看到这种情况。
最佳答案
当您传入 h
时,您并没有传入实际的 HashTable
对象。您正在传递对 HashTable
对象的引用。这意味着当您对 h
进行更改时,您正在对同一个对象进行更改。
解决这个问题的方法是使用 new
关键字。这将强制 Java 运行时创建一个新的 HashTable
对象。
关于Java:本地哈希表覆盖全局哈希表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176279/