【发布时间】:2011-05-26 12:53:57
【问题描述】:
当我对我的单元测试运行它时,下面的 sn-p 是有意义的。我在标有“>>>>”的行上得到一个 ClassCastException(对象不能转换为字符串)。这种类型的操作可以在泛型中完成吗?
public class ArrayUtils<E> {
public static <E> E[] appendToArray(E[] array, E item) {
E[] result = (E[])new Object[array.length+1];
for(int i=0; i < array.length; i++ ) {
result[i] = array[i];
}
result[result.length-1] = item;
return result;
}
}
@Test
public void testAppendToArray() {
String[] array = new String[1];
array[0] = "a";
assertSame("Array is not correct length.", 1, array.length );
>>>> String[] appendToArray = ArrayUtils.<String>appendToArray(array, "b");
assertSame("Array is not correct length.", 2, appendToArray.length );
}
【问题讨论】:
-
有什么原因这个`E[] result = (E[])new Object[array.length+1];`不能是
E[] result = new E[array.length+1];(我没做过多少Java泛型,也许这是被禁止的,但它似乎可以解决它?) -
@Noon Silk,禁止使用,因为E甚至不是类,而是TypeParameter。
-
老实说,留下参考数组。