简单理解java泛型的本质(非类型擦除)
所以说java里面的泛型是假的,运行时不存在滴。仔细一看,System.out.println;这一句多加了个String强转。当然,这个代码运行是会报错的,java.lang.Integer cannot be cast to java.lang.String,因为raw()返回的是Integer类型,强转成String类型失败了。当然,这里运行时也会报java.lang.Integer cannot be cast to java.lang.String这个错误。java中的泛型只在编译期有效,在运行时只有调用者知道需要什么类型,且调用者调用泛型方法后自己做强制转换,被调用者是完全无感的。这里似乎又不太一样,变成了,其实是一样的啦,如果单独写是相当于的。那么,我们就延伸一下,被调用者是完全无感的,它只能尽力拿到它知道的类型,比如这里就只能尽力拿到Comparable,如果是拿到的就是Object。我们来看看反编译后的代码:可以看到,跟我们的分析完全一致。
用户评论