我有一个通用的(我不太确定这是否是正确的术语..)方法,可以将对象添加到数组中。
@SuppressWarnings("unchecked")
public static <T>T[] appendArray(T[] a, T b)
{
T[] temp = (T[])new Object[a.length + 1];
System.arraycopy(a, 0, temp, 0, a.length);
temp[a.length] = b;
return temp;
}
在 Eclipse 中,这段代码没有给我任何错误,没有警告(除了被抑制的“未检查”警告),而且在我看来,这应该可以工作。但是,当我尝试使用诸如。 .
Integer[] a=new Integer[]{1,2,3};
Integer b=4;
a = appendArray(a, b);
在这种情况下,它为我提供了ClassCastException
我发布的第二段代码的第 3 行。错误说,[Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
我既看不到也不明白为什么会这样做。我的意思是,我使用的是泛型,那么为什么除了我在实例化期间强制Object[]
键入的那个之外,还有其他的呢?T
如果它是第 4 行的那个(当然是在第 1 位代码中),为什么不在那里抛出异常,而不是在第 2 位代码的第 3 行?