2

我有两种方法。

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

4

3 回答 3

3

如果你想要一个正确类型和长度的空数组

T[] s = Arrays.copyOf(Arrays.copyOf(array, 0), array.length);

如果您对精确副本没问题,您可以使用

T[] s = Arrays.copyOf(array,  array.length);
于 2013-11-07T11:02:38.723 回答
1

因为T是一种扩展Comparable它应该是的类型

@SuppressWarnings("unchecked")
T[] s = (T[]) new Comparable[array.length];

因为IS NOT AObject不能转换为类型的原因ComparableObjectComparable

于 2013-11-07T10:39:18.080 回答
0

的集合object不能转换为 的集合T。更重要的是你不能这样做:T x = new T(). 您可以为能够创建类型对象的类提供依赖项T。要复制你的array,你可以使用System.arraycopy

于 2013-11-07T10:18:33.967 回答