2013-10-31 10 views
8

Ich mache ein Java-Projekt und ich habe dieses Problem und weiß nicht, wie ich es beheben kann.MyClass kann nicht in java.lang.Comparable umgewandelt werden: java.lang.ClassCastException

Die Klassen in meinem Projekt (vereinfacht):

public class Item { 

    private String itemID; 
    private Integer price; 

    public Integer getPrice() { 

     return this.price; 

    } 

} 

public class Store { 

    private String storeID; 
    private String address; 

} 

public class Stock { 

    private Item item; 
    private Store store; 
    private Integer itemCount; 

    public Integer getInventoryValue() { 

     return this.item.getPrice() * this.itemCount; 

    } 
} 

Dann versuche ich ein ArrayList Aktien zu sortieren, damit ich eine andere Klasse erstellen CompareByValue

public class CompareByValue implements Comparator<Stock> { 

    @Override 
    public int compare(Stock stock1, Stock stock2) { 

     return (stock1.getInventoryValue() - stock2.getInventoryValue()); 

    } 

} genannt

Als ich versuchen, das Programm auszuführen, gibt es den Fehler:

Exception in thread "main" java.lang.ClassCastException: Stock cannot be cast to java.lang.Comparable

Wer weiß, was los ist?

+1

Wie starten Sie das Programm, speziell wo Sie die Liste sortieren? –

Antwort

12

Es ist, weil StockComparable nicht implementiert. Entweder setzen es:

public class Stock implements Comparable<Stock> { 
    public int compareTo(Stock o) { 
     // ... 
    } 
} 

... Oder übergeben eine Instanz von CompareByValue als Parameter an die sort() Methode:

Collections.sort(list, new CompareByValue()); 
0

nur von oben Code, es sieht gut aus. Bist du sicher die Ausnahme vom obigen Code? Wenn Sie Stock-Objekt in eine sortierte Auflistung einfügen, sehen Sie eine solche Ausnahme und müssen eine vergleichbare Schnittstelle implementieren.

Aber für den Fall, dass Sie einfach Ihren benutzerdefinierten Comparator übergeben, müssen Sie die Aktie nicht zu einem Vergleichswert machen. Es ist der gleiche Fall, wie Sie anonyme Comparator-Implementierung geben.

Setzen Sie Ihren Vergleicher zu sortierten Sammlung wie TreeSet und fügen Sie dann das Bestandsobjekt in sortierte Sammlung, sollte es funktionieren, ohne vergleichbare Schnittstelle implementieren.

+0

Es tut mir leid, alle. Habe gerade herausgefunden, dass in der TXT-Datei ein Tippfehler enthalten ist, wodurch ein Nullobjekt erstellt und zur ArrayList hinzugefügt wird. Bitte entfernen Sie diese Frage so schnell wie möglich. – user2234225