2016-03-25 11 views
3

Ich war so lange auf der Suche nach einer Antwort auf meine Frage. Ich habe viele ähnliche Themen gefunden, weiß aber immer noch nicht, was ich tun soll.Sammlungen sort generics types java

Ich habe eine Klasse, in der ich Objekte in sortierter ArrayList speichern möchte.

Zum Beispiel habe ich diese Klasse:

public class Kwadrat implements Comparable<Kwadrat> { 

    private int a; 

    public Kwadrat(int a){ 
     this.a = a; 
    } 

    public int get_size(){ 
     return a*a; 
    } 

    public int compareTo(Kwadrat b){ 
     if(b.get_size() > get_size()){ 
      return -1; 
     } 
     if(b.get_size() < get_size()){ 
      return 1; 
     } 
     return 0; 
    } 
} 

Und hier ist meine Sort Klasse:

public class Sort <T> { 
    ArrayList<T> arraylist; 

    public Sort(){ 
     arraylist = new ArrayList<T>(); 
    } 


    public void add(T element){ 

     arraylist.add(element); 

     Collections.sort(arraylist); 



    } 
} 

Collections.sort(arraylist); sagt mir immer noch, dass „keine Instanz (en) vom Typ Variable (n) T existiert so, dass T conforms to Comparable<? super T> ".

+1

Wenn Sie die Elemente sortiert speichern müssen, würde ich vorschlagen, eine 'TreeSet' statt' ArrayList' verwendet, die manuell ein Element jedes Mal sortiert werden muss, ist eingefügt. – Filkolev

+0

Ich stimme @Filkolev zu. Brauchen Sie wirklich eine ArrayList (indizierter Zugriff)? – marcolopes

Antwort

5

Ihre Sort Klasse hat derzeit keine Grenzen von seinem Typ Parameter T, so könnte es jede Art sein, auch ein Typ, der nicht Comparable ist. Es würde Object akzeptieren, was nicht Comparable ist. Da es keine Grenzen gibt und der Compiler erkennt, dass es Grenzen gibt, die an den Einzelarg Collections.sort method übergeben werden können, liegt Ihr Compilerfehler vor.

Sie sollten die gleichen Grenzen auf T, die Collections.sort erwartet, erstellen.

public class Sort <T extends Comparable<T>> { 

Oder noch besser:

public class Sort <T extends Comparable<? super T>> { 
3

Ändern Sie T zu T extends Comparable<T> in der public class Sort <T> { Zeile, da die Methode <T extends Comparable<? super T>> Parameter erfordert.