St.*_*rio 13 java arrays generics
我的意思是,有什么好的理由吗?该方法得到以下签名:
public static Object newInstance(Class<?> componentType,
int length)
throws NegativeArraySizeException
Run Code Online (Sandbox Code Playgroud)
在我看来,将方法声明如下更方便:
public static <T> T[] newInstance(Class<T> componentType, int length)
throws NegativeArraySizeException
Run Code Online (Sandbox Code Playgroud)
这样,当创建泛型类型的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.
}
}
Run Code Online (Sandbox Code Playgroud)
是否有充分的理由将返回值类型声明为Object?对我而言似乎非常不耐烦.
Pet*_*ser 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);第二个例子说明了为什么这个方法不能只返回一个通用的对象数组,因为primitves的数组不是对象数组(另一方面是数组的数组).
使用这个辅助方法......
private static <T> T[] newArray(Class<?> type, int len){
return (T[])Array.newInstance(type, len);
}
Run Code Online (Sandbox Code Playgroud)
... int[] b = newArray(int.class, 5);将导致编译错误:
不兼容的类型,需要int [],但找到T []
...并且int[] b = (int[])newArray(int.class, 5);将导致编译错误:
无法将Object []强制转换为int []
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |