我在阅读其他一些代码
时遇到过这种语法Map<String, String> map = new HashMap<String, String>() {
{
put("a", "b");
}
};
我知道如何使用anonymous inner class
,但这似乎有所不同。有人可以解释一下上面的工作原理以及它与Map<String, String> map = new HashMap<String, String>(); map.put("a", "b");
的不同之处吗?
答案 0 :(得分:6)
您基本上是在创建一个匿名类实例并指定instance initializer。根据正常的类来考虑它,例如:
class Person {
String age, name;
List<String> hobbies;
{
hobbies = new ArrayList<String>();
}
public Person(String name, String age) {
this.name = name;
this.age = age;
}
}
您认为上述情况如何?你的匿名课正在做类似的事情。 :)
答案 1 :(得分:2)
正如Sanjay T. Sharma清楚解释的那样,它正在创建匿名类实例。事实上,它正在扩展java.util.HashMap
。请考虑以下代码:
package com.test;
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) {
Map<String, String> mapSimple = new HashMap<String, String>();
System.out.println("Simple java.util.HashMap:");
System.out.println("\t" + mapSimple.getClass());
Map<String, String> map = new HashMap<String, String>() {
{
put("a", "b");
}
};
System.out.println("Anonymous class based on java.util.HashMap:");
System.out.println("\t" + map.getClass());
System.out.println("\t" + map.getClass().getSuperclass());
}
}
它产生以下输出:
Simple java.util.HashMap:
class java.util.HashMap
Anonymous class based on java.util.HashMap:
class com.test.Demo$1
class java.util.HashMap
注意此类匿名类的名称,并且此类扩展java.util.HashMap
。