編輯:注意帖子被標記爲重複;我通讀了其他類似的問題,但它確實沒有像我一樣處理同樣的問題。我正在使用一個保證類型爲Comparable的類,但我無法投射它。ClassCastException從Object []轉換爲Comparable []
我有以下類,它是一個接口隊列的實現。我確定HeapPriorityQueue對象的工作類型爲Comparable,因此E.compareTo(E other)方法可用。
我在我的主要方法中創建了一個HeapPriorityQueue的實例。當病人是實現可比
HeapPriorityQueue<Patient> queue = new HeapPriorityQueue<>();
在不過彙編一類,我得到一個異常拋出ClassCastException指向朝下面的代碼
public class HeapPriorityQueue<E extends Comparable<E>> implements Queue<E>
{
private final int DEFAULT_CAPACITY = 10;
private int size;
private E[] array;
public HeapPriorityQueue()
{
size = 0;
array = (E[]) new Object[DEFAULT_CAPACITY + 1];
}
}
異常的最後一行:
線程「main」中的異常java.lang.ClassCastException:[Ljava.lang.Object;不能轉換爲[Ljava.lang.Comparable;
是否有某種原因(例如老師這麼說),它需要是一個數組具體?還有其他的數據結構(例如'List')可能更適合你... –
dcsohl
@dcsohl我的選擇有限。這是一個關於數據結構的課程,所以我想我的選擇或者是單鏈表或者堆結構的數組。 –
即使你自己寫了,我也肯定會去某種'List'。正如你所發現的那樣,你不能執行'new E [size];'你不能從Object []轉換到'E []'(即使你可以,你也不想這樣做,因爲你的新的Object []'完全是'Object's而不是'E's!)。你最好的選擇可能是'ArrayList'。是否允許這是一個不同的問題。雖然我不得不問...如果它是一個**堆** PriorityQueue,你不應該設置一個堆而不是一個數組/列表? – dcsohl