У меня есть два вопроса. Во-первых, рассмотрите приведенный ниже код.
public class Test{
private static final List<String> var = new ArrayList<String>() {{
add("A");
add("B");
System.out.println("INNER : " + var);
}};
public static void main(String... args){
System.out.println("OUTER : " + var);
}
}
Когда я запускаю этот код, он дает мне результат ниже
INNER : null
OUTER : [A, B]
Может ли кто-нибудь объяснить, почему INNER
является нулевым и исполняемым потоком в то время, когда именно "A" и "B" добавляются в collection
?
Во-вторых, я внес некоторые изменения в код выше и изменил его ниже одного (просто добавьте метод добавления в первую скобку)
public class Test{
private static final List<String> var = new ArrayList<String>() {
public boolean add(String e) {
add("A");
add("B");
System.out.println("INNER : " + var); return true;
};
};
public static void main(String... args){
System.out.println("OUTER : "+var);
}
}
После запуска выше кода я получил результат ниже
OUTER : []
После этого я совершенно не знаю, что происходит. Куда пошел INNER
? Почему это не печатает? Не называется ли это?