로컬로 정의 된 Hashtable에서 작업을 수행하는 동안 로컬 Hashtable에 할당 된 다른 클래스의 전역 Hashtable에도 이러한 작업이 수행됩니다. 이것이 분명해야 할 간단한 문제인지 잘 모르겠지만 그것에 대해 질문을 찾을 수는 없습니다.Java : 로컬 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를 분리하는 방법이 있습니까? 또한 Generics를 사용하지 않는 것에 대해 사과드립니다. 해시 테이블을 검색 할 때 꽤 자주 보았습니다.
이런 종류의 동작을 부작용 *이라고합니다. – JonK