关于泛型的一个小问题
Java code
package com.inspirx.mkt;
public class Test<T> {
public T get(Integer i) {
Integer k = i;
return (T)k;
}
public static void main(String[] args) {
Test<String> t = new Test<String>();
t.get(2);
}
}
请问各位大侠以上程序执行为什么不出错,而我把Integer强转成String就出错. 但是以上写法难道不是和强转一个意思吗?
这块不理解了.对泛型了解的不深.请各位前辈指较.
注:return (T)k; 这句话有黄叹号.不知道为什么有,好像是没用到怎么事的.
------解决方案--------------------
泛型会在编译期执行类型安全检查,但在运行时 泛型将都由于擦出原因被认作是Object,所以此处的T在运行时只是Object不管你是Integer还是S挺都可以,但是强制类型转换时String就是String,Integer就是Integer,所有会出现编译期异常无法执行!记住泛型在运行期间会被擦出类型!