【发布时间】:2019-03-12 09:03:44
【问题描述】:
我有两个问题。首先,考虑下面的代码。
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 时执行流程?
其次,我对上面的代码做了一些修改,修改为下面的(只需将add方法放在第一个括号内)
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去哪儿了?为什么不打印?不叫吗?
【问题讨论】:
-
这个 btw 是一个很大的反模式
-
需要使用
"INNER " + this打印出ArrayList的当前状态,var此时没有赋值。
标签: java arraylist collections static