我看到这么一句
private static Map<String, User> instance = Collections.synchronizedMap(new HashMap());
其中new HashMap()没有写成 new HashMap<String, User>()
这是为何?
jdk 1.5 以前集合是没有泛型概念的,所以当时的类型约束纯粹自己写,然后强转。如下: // 忽略添加map的部分.
Map map = new HashMap();
for(object obj : map){
if(obj instanceof String){
String str = (String) obj;
Sysout(str);
}
}
其实目前的java泛型还是用的这部分代码,只不过不用你写了,而是由编译器偷偷的在编译前替换一下再编译。不相信可以写个泛型代码,编译之后在反编译,你就看得到了。 之所以这么做就是为了兼容以前不写泛型的代码,让他们也还可以正常运行。