我的Java程序中有一个泛型类,类型可以是Double或Integer。我需要编写一个函数,它首先需要对泛型类型的值数组进行排序。我得到了以下异常,我不确定如何修复它。如果有任何帮助,我将不胜感激。
Exception in thread "main" java.lang.NullPointerException
at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:157)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:146)
at java.util.Arrays.sort(Arrays.java:472)
at datastructures.CircularBuffer.getMedian(CircularBuffer.java:98)
at test.CircularBufferTests.test4(CircularBufferTests.java:67)
at test.CircularBufferTests.main(CircularBufferTests.java:13)
下面是我的代码:
public class CircularBuffer<T extends Number> {
private T[] array;
public CircularBuffer(int n){
array = (T[])new Number[n];
}
public double getMedian(int size){
...
Arrays.sort(array);
...
}
}
谢谢!
发布于 2014-09-18 17:04:28
显然,这里没有足够的代码来理解,但是对于将T传递到的ComparableTimSort (异常实际上来自的地方)类,并不是所有传递的T类型(Number类)都实现了可比较接口,以检查这是否是您的问题尝试用可比较的强制转换传递给您T
发布于 2014-09-18 17:05:34
您必须编写自定义比较器才能使用Arrays.sort()进行排序。
Arrays.sort(array, yourComparator);
发布于 2014-09-18 18:30:32
你可以做到
vhax建议的
Arrays.sort(数组,新的比较器{ @Override public int compare(T arg0,T arg1) { ... } });
公共类CircularBuffer
这样,您就可以更具体地限制T。这被称为“多边界”http://docs.oracle.com/javase/tutorial/java/generics/bounded.html
https://stackoverflow.com/questions/25918281
复制