[英]Sorting a generic array of elements in Java
我的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);
...
}
}
謝謝!
顯然,這里沒有足夠的代碼來理解,但是對於您將T傳遞到的ComparableTimSort(實際上是異常的來源)類,並不是您傳遞的所有T類型(Number類)都實現Comparable接口,以便檢查這是否是您的問題,請嘗試通過可比的類型轉換將T傳遞給您
您必須編寫一個自定義的Comparator才能使用Arrays.sort()進行排序。
Arrays.sort(array, yourComparator);
你可以做
vhax建議什么。 進一步來說
Arrays.sort(array, new Comparator<T>{ @Override public int compare(T arg0, T arg1) { ... } });
瘋狂的像素建議,更具體地
public class CircularBuffer<T extends Number & Comparable<T>>
這樣,您將T限制得更具體。 這稱為“多重界限” http://docs.oracle.com/javase/tutorial/java/generics/bounded.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.