上記の 、つまり、それが使用されるものにアクセスできるはずの aTreeMap
を使用してインスタンス化しようとしています(「will」が正確に問題であるに違いないと思います...):Comparator
TreeMap
final Map<String, Integer> map = new TreeMap<String, Integer>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Integer i = map.get(o1);
// Error: "the local variable map may not have been initialized"
return ...;
}
});
Comparator<String>
をインスタンス化するときにmap
変数がまだ初期化されていないため、このエラーが発生する理由を理解できますが、回避策はありますか?
解決策はimplementationsetComparator
のメソッドになりTreeMap
ますが、そのcomparator
フィールドは final として宣言されています。
final Map<String, Integer> map = new TreeMap<String, Integer>();
Comparator<String> comparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
Integer i = map.get(o1);
return ...;
}
};
// map.setComparator(comparator);