我有两种方法。
public static <T extends Comparable<T>> T[] sort(T[] array) {}
和
public static <T extends Comparable<T>> T[] sort(T[] array,
Comparator<? super T> c) {}
没有任何错误的实现,但是在JUnit测试用例之后我在T [] s = ...
上出错了JUnit说:
java.lang.object cannot be cast to java.lang.Comparable;
在测试用例中,JUnit还在错误旁边给出了这一行:
assertArrayEquals(a1, ComparisonCountingSort.sort(ar1));
我的问题是要知道我可以在这里修复一个成功的JUnit测试用例。
答案 0 :(得分:3)
如果需要正确类型和长度的空数组
T[] s = Arrays.copyOf(Arrays.copyOf(array, 0), array.length);
如果您对确切的副本没问题,可以使用
T[] s = Arrays.copyOf(array, array.length);
答案 1 :(得分:1)
由于T
是一种扩展Comparable
的类型,因此它应该是
@SuppressWarnings("unchecked")
T[] s = (T[]) new Comparable[array.length];
由于Object
不是Comparable
Object
类型的原因无法转换为Comparable
答案 2 :(得分:0)
object
的集合无法投放到T
的集合中。
更有甚者,你不能这样做:T x = new T()
。
您可以为能够创建T
类型的对象的类提供依赖关系。
要复制array
,您可以使用System.arraycopy