我注意到在 Java 中Array.newInstance()
返回Object
,而不是T[]
. 这是可以理解的,因为这种方法是在 Java 支持泛型类型之前引入的。
然而,令人惊讶的是,没有等效的通用版本。Java 7Arrays.copyOf
不一样 - 它复制参数的内容,而不是创建一个新的虚拟数组(其中包含所有空对象)。
由于这似乎微不足道,有什么理由不将它添加到 JRE 中?还是我找不到?
更新
看来我将提供我自己的“微不足道”的实现来停止对这个问题的误解。
class MyArrayUtil {
//Generic version for classes
@SuppressWarnings("unchecked")
public static <T> T[] newArrayOf(T[] t, int len){
return (T[]) Array.newInstance(t.getClass().getComponentType(), len);
}
//For array of int
public static int[] newArrayOf(int[] t, int len){
return new int[len];
}
//For other primitive types...
}
我没有发布此代码作为答案,因为它不是问题的答案。问题是出于原因和/或现有代码,而不是如何实现。
更新
我已经更新了代码以使其类似于Arrays.copyOf
,其优点是程序员可以简单地更改参数的类型以将代码调整为另一种类型。我也消除了Array.newInstance
原始类型的使用。