В другом сообщении мне сказали что неправильно определять анонимный внутренний класс «после» (ниже) функции, которая его использует. Однако что-то вроде приведенного ниже компилируется и работает нормально:
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
"загружается" (не знаю точно, как происходит эта загрузка, поскольку существует только основной метод и объекты CompTest
не создаются), и, следовательно, когда main()
нуждается в intComp
, он доступен независимо от того, где в исходном файле он был фактически определен.
И даже если это работает (по вышеуказанной причине или даже по другой причине)... это плохая практика?