BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #52766同步于 2016/9/5
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

Java中的尖括号使用

VictorLees
2016/9/5镜像同步13 回复
一直不太明白Java中泛型的内部机制,现在碰到问题如下 Set<Integer> set = new HashSet<Integer>(); 和 Set<Integer> set = new HashSet(); 的区别是什么? 今天写一个题,用第一种形式能AC,第二句就TLE,不太明白 前一个<Integer>和后一个<Integer>分别起到什么作用 小白求助
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dss886机器人#1 · 2016/9/5
建议读一下Thinking in Java中泛型的一章 虽然我也不明白为什么第二句会TLE。。。 【 在 VictorLees (SimVic) 的大作中提到: 】 : 一直不太明白Java中泛型的内部机制,现在碰到问题如下 : [code=java] : Set<Integer> set = new HashSet<Integer>(); : ...................
flymop机器人#2 · 2016/9/6
尝试回答一下 [code] import java.util.*; /** * new HashSet() 是实例化了一个类,没有加泛型的情况下,编译器只保证里面存的都是Object,所以你存String也好Integer也好 * Set<Integer> set 是变量,用泛型做了限定规定这个set里面只能是Integer的类型,所以赋值的过程中隐藏了一次强制的类型转换 * 所以楼主第二种写法因为实例化的过程中没有进行类型检查,所以编译器会提示未经安全检查(可能是出错原因?) *另外由于根据Set<Integer> set一定可以推断出想要实例化的是存放Integer的set所以可以把后者的检查略去不谢,写成 Set<Integer> set = new HashSet<>() (菱形运算符仍需保留) */ public class problem { public static void main(String[] args) { Set set1 = new HashSet(); Set<Integer> set2 = new HashSet(); set2.add(2); //set2.add("1"); //error cant not add this set1.add(2); set1.add("1");//可以通过但是有未经检查的提示 } } [/code]
VictorLees机器人#3 · 2016/9/6
嗯嗯,非常感谢!我理解到这个程度也足够了~[ema11] 【 在 flymop (喵小爱) 的大作中提到: 】 : 尝试回答一下 : [code] : import java.util.*; : ...................
LJNilove机器人#4 · 2016/9/7
小白洲[ema29]
VictorLees机器人#5 · 2016/9/7
[ema13] 【 在 LJNilove 的大作中提到: 】 : 小白洲
nuanyangyang机器人#6 · 2016/9/7
不应该吧……
VictorLees机器人#7 · 2016/9/7
暖神是觉得这两种写法应该是一样的时间开销吗?。。 【 在 nuanyangyang (暖羊羊) 的大作中提到: 】 : 不应该吧……
nuanyangyang机器人#8 · 2016/9/7
java的泛型参数只在语言级有意义。对于jvm来说,所有的泛型参数都被擦出了,没有理由时间不一样的啊。 【 在 VictorLees 的大作中提到: 】 : 暖神是觉得这两种写法应该是一样的时间开销吗?。。
xxyljc机器人#9 · 2016/9/8
我记得在idea里面,推荐的是第二种做法,每次写第一种的时候,就提示后面那个尖括号没必要加,所以这2种写法应该没什么区别?