2016-01-16 2 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 ищет sth как «создание общего массива». Я уже отметил дубликат вопроса, просто взгляните на сообщение, которое я выбрал как дублирующий. – Paul

Смежные вопросы