2016-01-16 129 views
0

所以我需要做動態有序列表。不能轉換爲[Ljava.lang.Comparable

public class DynArrayListOrd<T extends Comparable<T>> { 
     private T[] tab ; 

     public DynArrayListOrd() 
     { 
      tab = (T[])new Object[startSize]; 
     } 
     .... 

     main { 
      DynArrayListOrd tab = new DynArrayListOrd(); 

      tab.add("John"); 
      tab.add("Steve"); 
     } 

當我運行代碼,我得到錯誤:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Comparable; 
    at structures.DynArrayListOrd.<init>(DynArrayListOrd.java:14) 
    at structures.DynamicArrayAppp.main(DynArrayListOrd.java:119) 
+0

編譯時應該看到警告! –

+0

可能的重複[如何在Java中創建通用數組?](http://stackoverflow.com/questions/529085/how-to-create-a-generic-array-in-java) – Paul

+0

轉換不會實際上轉換任何「對象」。所以'(T [])new Object [...];'不會產生'T []'。 – Paul

回答

0

T[] tab的擦除類型將爲Comparable[]。因此,你需要在構造函數中使用此類型:

public DynArrayListOrd() 
{ 
    tab = (T[]) new Comparable[startSize]; 
} 

還應啓用unchecked警告,以避免這類問題擺在首位。

1

你忘了泛型參數,<String>

DynArrayListOrd<String> tab = new DynArrayListOrd<>();

您的代碼必須是:

public class DynArrayListOrd<T extends Comparable<T>> { 
    private List<T> tab ; 

public DynArrayListOrd() 
{ 
    tab = new ArrayList<T>(); 
} 
.... 

public static void main(String[] args){ 
    DynArrayListOrd<String> tab = new DynArrayListOrd<>(); 

    tab.tab.add("John"); 
    tab.tab.add("Steve"); 
} 
+0

該代碼將產生與上述代碼相同的錯誤。該錯誤在構造函數中拋出。 '(T [])new Object [startSize];'不會神奇地將一個Object []變成一個'T []''。請刪除答案或更正答案。 – Paul

+0

是的,仍然是一樣的:/ – szufi

+0

@szufi搜索像「通用數組創建」。我已經標記了重複的問題,只是看看我選擇的文章爲dup。 – Paul

相關問題