私はいくつかの奇妙な行動をしています。
[更新:与えられた完全な実行可能な例:]
package finaltestwithenummapentry;
import java.util.ArrayList;
import java.util.EnumMap;
import java.util.Map.Entry;
public class FinalTestWithEnumMapEntry {
enum SomeEnum{
ONE, TWO, THREE;
}
public static void main(String[] args) {
EnumMap<SomeEnum, Integer> map = new EnumMap<SomeEnum, Integer>(SomeEnum.class);
map.put(SomeEnum.ONE, 1);
map.put(SomeEnum.TWO, 2);
map.put(SomeEnum.THREE, 3);
ArrayList<Entry<SomeEnum, Integer>> entryList = new ArrayList<Entry<SomeEnum, Integer>>();
for(final Entry<SomeEnum, Integer> entry : map.entrySet()){
System.out.println("Key is " + entry.getKey() + ", value is " + entry.getValue());
//This prints the correct keys and values
entryList.add(entry);
}
System.out.println("");
for(Entry<SomeEnum, Integer> entry:entryList){
System.out.println("Key is " + entry.getKey() + ", value is " + entry.getValue());
//This prints only the last entry each time
}
}
}
出力(JavaSE 1.6):
Key is ONE, value is 1
Key is TWO, value is 2
Key is THREE, value is 3
Key is THREE, value is 3
Key is THREE, value is 3
Key is THREE, value is 3
私entry
が最終的だと思っている私のは、毎回次のものによって上書きされているようです。for
各アイテムをループ内の匿名の内部クラスインスタンスに渡すため、毎回正しいエントリをキャプチャできる必要があります。
[更新:この問題はJava 7には存在せず、Java 6(およびそれ以前)のみに存在します]
更新:Java 6または7に対してコンパイルされているかどうかに関係なく、コードを機能させる必要があるかもしれません。どちらの場合でも、コードを機能させるための最も効率的な回避策は何ですか?