日期:2014-05-20  浏览次数:20675 次

关于泛型的一个小问题
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,所有会出现编译期异常无法执行!记住泛型在运行期间会被擦出类型!