今天在Codewars上面看到一段代码:
public static HashMap<Character, List<String>> mapping = new HashMap<Character, List<String>>() {
{
put('0', Arrays.asList("0", "8"));
put('1', Arrays.asList("1", "2", "4"));
put('2', Arrays.asList("1", "2", "3", "5"));
put('3', Arrays.asList("2", "3", "6"));
put('4', Arrays.asList("1", "4", "5", "7"));
put('5', Arrays.asList("2", "4", "5", "6", "8"));
put('6', Arrays.asList("3", "5", "6", "9"));
put('7', Arrays.asList("4", "7", "8"));
put('8', Arrays.asList("0", "5", "7", "8", "9"));
put('9', Arrays.asList("6", "8", "9"));
}
};
这段代码为类的静态成员变量进行初始化。
乍一看这段代码没觉得哪里不对,仔细看发现没那么简单。
这段代码是利用HashMap的匿名子类重写了put方法(自动重写直接调用了父类put方法,没有其他改动),然后调用子类的put方法对mapping进行了初始化。