當我從我當前的foo(...)
方法調用我的bar(Map map)
方法時,遇到以下行爲,其中bar()表示map爲空。Java方法通過值問題
private void foo() {
Map map = new Map(); // pseudocode
// add (key, value)'s to map
printMap(map); // prints key and values
Map newMap = bar(map);
...
System.out.println(newMap.size()); // returns 0
} // end foo();
private Map bar(Map map) {
printMap(map); // return empty
...
}
編輯:難道是這種印刷方法的調用it.remove()
?當我刪除這個電話時,我不再有問題。
private void printMap(Map mp) {
Iterator it = mp.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
logger.info(pairs.getKey() + " = " + pairs.getValue());
it.remove(); // avoids a ConcurrentModificationException
}
}
如果'printMap'是冪等的,你不應該觀察到的行爲=>顯示您的實際代碼。 – assylias
在'bar'方法中發佈更多代碼..您在該方法中做了些什麼以及您從該方法返回的內容? –
我沒有看到任何條目被添加到地圖,所以爲什麼它不應該是空的?試着用現有的代碼添加條目應該顯示出來。 – h22