MyClass ne peut pas être lancé à java.lang.Comparable: java.lang.ClassCastException
Je suis en train de faire un projet en java et j'ai eu ce problème et ne sais pas comment le résoudre.
Les classes de mon projet (simplifié):
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;
}
}
Ensuite, j'essaie de trier un ArrayList
de Stock donc j'ai créer une autre classe appelée CompareByValue
public class CompareByValue implements Comparator<Stock> {
@Override
public int compare(Stock stock1, Stock stock2) {
return (stock1.getInventoryValue() - stock2.getInventoryValue());
}
}
Lorsque j'essaie d'exécuter le programme, il donne l'erreur:
Exception in thread "main" java.lang.ClassCastException: Stock ne peut pas être lancé à java.lang.Comparable
Ce que quelqu'un sait quel est le problème?
Comment exécuter le programme, spécialement lorsque vous triez la liste?
OriginalL'auteur user2234225 | 2013-10-31
Vous devez vous connecter pour publier un commentaire.
C'est parce que
Stock
n'est pas la mise en œuvre deComparable
. À les mettre en œuvre:... Ou de passer une instance de
CompareByValue
comme paramètre à latrier()
méthode:OriginalL'auteur Óscar López
seulement à partir de code ci-dessus, il semble bien. êtes-vous sûr que l'exception de code ci-dessus?
si vous venez de mettre le Stock objet dans une collection triée, vous verrez une telle exception et doivent implémenter l'interface Comparable.
Mais pour le cas où il suffit de passer votre personnalisé Comparateur, vous n'avez pas besoin de faire des Actions d'être Comparable. il en est de même, comme vous donner anonyme Comparateur de mise en œuvre.
définir votre comparateur de collection triée comme TreeSet, puis ajouter le bouillon de l'objet dans la collecte sélective, il devrait fonctionner sans implemting interface Comparable.
OriginalL'auteur Steve Park
Les tableaux de.type(s, (a,b) -> un.nom de famille.compareTo(b.nom de famille));
cette expression lambda résolu mon problème
OriginalL'auteur barkman345