使用泛型时没有类强制转换异常

时间:2015-10-20 11:13:52

标签: java generics casting

这个程序......

public static void main(String[] args) {

    String[] table = (String[]) new Object[20];

    table[1] = "bla";

}

...生成强制转换异常:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.String;
at tests.App.main(App.java:10)

但是,使用泛型完成相同的操作,不会产生任何错误:

public static void main(String[] args) {        

    doIt("bla");

}

public static <V>void doIt(V val) {

    V[] table = (V[]) new Object[20];

    table[1] = val;     
}

为什么使用泛型会有所不同?

1 个答案:

答案 0 :(得分:3)

这是因为type erasure。在运行时,V[]只是Object[]