原项目中代码是这样的:
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方法。

文章详细解释了一段Java代码,其中使用内部类和构造方法初始化了一个静态的HashMap。在编译后,这实际上创建了一个匿名内部类,该类继承自HashMap并在构造时添加了初始键值对。执行时,通过构造函数调用HashMap的put方法来设置数据。
38

被折叠的 条评论
为什么被折叠?



