在刷题过程中遇到下面这条语句,看起来十分简洁,但是没看明白其中用到的语法,故学习了一下。
HashMap<Character, String> map = new HashMap<>(){ {put('2', "abc"); put('3', "def"); put('4', >"ghi"); put('5', "jkl"); put('6', "mno"); put('7', "pqrs"); put('8', "tuv"); put('9', "wxyz");} };
- 1
这里涉及到两个语法,匿名内部类和实例初始化块。
new 类名或接口名 () {...},其中{...}包含了匿名内部类的实现。{}括起来,放置在类的实例变量和构造方法之间。示例代码中的{{...}}使用了匿名内部类的语法,并在内部定义了一个实例初始化块,该块包含了多个put方法调用,用于初始化map对象。匿名内部类包含了实例初始化块,这个实例初始化块在创建map对象时执行,向map中添加了键值对。这种方式可以用于在创建对象时执行一些特定的初始化操作,而不需要显式定义一个子类或构造方法。
HashMap<Character, String> map = new HashMap<>() {
};
上述代码实际上是定义了一个匿名内部类,是 HashMap 的子类,用来实例化 map ,但并没有任何实际操作。
HashMap<Character, String> map = new HashMap<>() {
{
put('2', "abc");
put('3', "def");
put('4', "ghi");
put('5', "jkl");
put('6', "mno");
put('7', "pqrs");
put('8', "tuv");
put('9', "wxyz");
}
};
第一对大括号里就可以写一般类能写的东西,比如构造方法,成员变量,其他方法等。只不过这里写了一个实例初始化块,用来初始化 map。
仅限刷题使用,实际项目中不建议使用。