【发布时间】:2014-12-27 08:02:55
【问题描述】:
下面是两种方法,一种将 Object 转换为 Generic 类型,另一种将 Object[] 转换为 Generic 类型数组。
public static <T> T returnElement(T a){
Object obj = new Object();
return (T)obj;
}
public static <T> T[] returnArray(T[] a){
Object obj[] = new Object[10];
return (T[])obj;
}
当我打印这两种方法的结果时,将 Object[] 转换为 Generic type[] 成功并打印 java.lang.Object。我不明白为什么 returnArray() 不抛出 ClassCastException 以及两者之间的区别是什么?
System.out.println(ArrayAlg.<String>returnArray(new String[]{"a","b","c"})); // prints java.lang.Object
System.out.println(ArrayAlg.<String>returnElement("s")); //ClassCastException
【问题讨论】:
-
您的第二个示例返回一个泛型类型的数组(即
String)。您的第一个示例返回泛型类型(String;Object不是String,您不能将其转换为一个)。
标签: java arrays generics casting