8 回答
BIG阳
TA贡献1859条经验 获得超6个赞
由于java的泛型在运行时会擦除,所以本该有泛型类型参数的类或方法在初始化时可以省略,但这样虽然没有error却会有warning,所以最好加上,懒的话可以用java7以后的diamond语法new HashMap<>()
小怪兽爱吃肉
TA贡献1852条经验 获得超1个赞
可以的,但是编译器会提示警告。
jdk 1.5 以前集合是没有泛型概念的,所以当时的类型约束纯粹自己写,然后强转。如下:
// 忽略添加map的部分.
Map map = new HashMap();
for(object obj : map){
if(obj instanceof String){
String str = (String) obj;
Sysout(str);
}
}
其实目前的java泛型还是用的这部分代码,只不过不用你写了,而是由编译器偷偷的在编译前替换一下再编译。
不相信可以写个泛型代码,编译之后在反编译,你就看得到了。
之所以这么做就是为了兼容以前不写泛型的代码,让他们也还可以正常运行。
蛊毒传说
TA贡献1895条经验 获得超3个赞
Java1.5之后才支持泛型,所以为了兼容以前的老代码,Java泛型是通过类型擦除来实现的,所以像
new HashMap();
这样的写法是可以通过编译的。
但是这样是类型不安全的,不推荐这样的写法,还是应该使用泛型,带上类型参数。
慕莱坞森
TA贡献1810条经验 获得超4个赞
钻石语法(属于Coin项目),这是Java7的一项改进,减少处理泛型时敲键盘的次数。
7以前: Map<String, User> map = new HashMap<String, User>();
7以后: Map<String, User> map = new HashMap<>();
编译器会推断出后面的泛型。
添加回答
举报
0/150
提交
取消