別の投稿で、匿名の内部クラスをそれを使用する関数の「後」(下)に定義するのは間違っていると言われました。ただし、以下のようなものはコンパイルされ、正常に実行されます。
public class CompTest {
public static void main(String[] args) {
TreeSet<Integer> ts = new TreeSet<Integer>(intComp);
ts.add(1);
ts.add(2);
ts.add(3);
System.out.println(ts.toString());
}
private static Comparator<Integer> intComp = new Comparator<Integer>() {
@Override
public int compare(Integer i1, Integer i2) {
return i2.compareTo(i1);
}
};
}
これに関する公式の言葉は何ですか?私の推測では、はであるためintComp
、static
クラスCompTest
が「ロード」されるときに1回インスタンス化されます(メインメソッドのみがあり、CompTest
オブジェクトが構築されていないため、そのロードがどのように行われるかは正確にはわかりません)。したがって、main()
必要に応じintComp
て使用できます。ソースファイルのどこで実際に定義されたかに関係なく。
そして、それが機能するとしても(上記の理由または別の理由で)...それは悪い習慣ですか?