我正在嘗試在Java中編寫BinarySearchTree的代碼。當我嘗試通過實例化Integer BST來測試它時,我不斷收到運行時錯誤。下面是相關的代碼:鑄造對象到相當的運行時錯誤
public class BinarySearchTree<E extends Comparable<E>> {
private E[] nodes;
@SuppressWarnings("unchecked")
public BinarySearchTree() {
nodes = (E[])new Object[10];
}
}
現在,我此行的主要:
BinarySearchTree<Integer> test = new BinarySearchTree<Integer>();
當我運行代碼,我得到這個錯誤鏈接到構造函數的第一行:
[Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable;
我不是很熟悉泛型,但我猜這是因爲Object沒有定義的compareTo方法?如果這條線不起作用,我還有什麼其他的選擇,這樣我可以有一個數組,可以以某種方式持有泛型Comparable類型?
您在構造函數中也有編譯錯誤。請確保您發佈的調試代碼幫助編譯的代碼能夠重現您嘗試獲得幫助的問題! :) – nbrooks
[如何在Java中創建通用數組?]可能的重複(https://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java) – nbrooks
[本答案](https://stackoverflow.com/a/4221845/803925)特別應該是如何處理這種情況的一個很好的例子。你最終會做一些類似於'clazz.cast(Array.newInstance(clazz.getComponentType(),size))'的地方,其中'clazz'的類型爲'Class',並且是你的構造函數的一個參數。當你調用它時你會傳入'Integer [] .class'。如果你使用的是集合而不是數組,那麼這會容易得多。 –
nbrooks