原项目中代码是这样的:
public class Test{
public static Map<String, String> TEST_MAP = new HashMap<String, String>() {{
put("a", "a");
put("b", "b");
}};
}
原理:
实际是利用内部类+修改内部类的构造方法实现的。
编译后的代码结构是这样
多了个内部类,重点就是这个内部类:
这块代码
new HashMap<String, String>() {{
put("a", "a");
put("b", "b");
}};
}
运行后,其实生成的是一个匿名内部类,这个类继承了HashMap,即相当于
new Test$1()
而跑这个new对象时,会走构造方法,因为继承了HashMap所以调用父类的put方法。