我知道这段代码:
Set<String> set = new HashSet<String>() {{
add("test1");
add("test2");
}};
真正的含义是:
Set<String> set = new HashSet<String>() {
{//initializer
add("test1");
add("test2");
}
};
初始化块在构造器块之前被执行。在上面的例子中,add("test1")在构造器被执行之前就被调用了。构造器可能会初始化许多实例字段,以使这个类正常工作。我想知道为什么在构造器之前调用.add() 也能正常工作?是否存在任何可能引起问题的情况?
map = new HashMap<E,Object>();
而add方法则是这样的:return map.put(e, PRESENT)==null;
如果你的假设是正确的,那么这将导致NPE。 - Daniel Kaplan