我的意思是,有什么好的理由吗? method得到了以下签名:
public static Object newInstance(Class<?> componentType,
int length)
throws NegativeArraySizeException
在我看来,将方法声明如下更为方便:
public static <T> T[] newInstance(Class<T> componentType, int length)
throws NegativeArraySizeException
这样,在创建泛型类型的aray时,不需要执行额外的转换,例如。
public class Gen<T>{
private T[] a;
public static <T> Gen<T> createByClass(Class<T> clazz){
a = clazz.cast(Array.newIntance(clazz.getComponentType(), 8); //we have to invoke
//clazz.cast here.
}
}
有没有充分的理由将返回值类型声明为Object
?对我而言似乎非常不耐烦。
答案 0 :(得分:12)
您可以使用Array.newInstance(Class<?> componentType, int length)
创建
Integer[] a = (Integer[])Array.newInstance(Integer.class, 5);
int[] b = (int[])Array.newInstance(int.class, 5);
int[][] c = (int[][])Array.newInstance(b.getClass(), 5);
第二个例子说明了为什么这个方法不能只返回一个通用的对象数组,因为原始数组不是对象数组(另一方面,数组是数组)。 / p>
使用这个辅助方法......
private static <T> T[] newArray(Class<?> type, int len){
return (T[])Array.newInstance(type, len);
}
...使用int[] b = newArray(int.class, 5);
会导致编译错误:
不兼容的类型,需要int [],但找到T []
...和int[] b = (int[])newArray(int.class, 5);
将导致编译错误:
无法将Object []强制转换为int []