JUnit测试用例在泛型方法中输出错误的元素

时间:2013-11-07 10:10:55

标签: java generics testing junit casting

我有两种方法。

 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测试用例。

3 个答案:

答案 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