我還是Java和Eclipse的新手。我應該通過泛型類在列表中找出最便宜的項目並打印出它的參數。我有這樣的:找出最便宜的項目
public class Store<T extends Item>{
public List<T> items = new ArrayList<T>();
public void addItem(T it){
items.add(it);
}
public T cheapestItem(){
T cheapest;
Collections.sort(items, (i1, i2) -> i1.getPrice().compareTo(i2.getPrice()));
cheapest = Collections.min(items,null);
return cheapest;
}
}
在我的主要活動:
Store<Item> store = new Store<>();
for (int i = 0; i < items.size(); i++) {
store.addItem(items.get(i).getA());
store.addItem(items.get(i).getB());
}
System.out.println("Cheapest item price is " + store.cheapestItem().getPrice());
我得到一個錯誤信息:
Exception in thread "main" java.lang.ClassCastException: com.java.school.B cannot be cast to java.lang.Comparable
at java.util.Collections.min(Unknown Source)
at java.util.Collections.min(Unknown Source)
at com.java.school.Store.cheapestItem(Store.java:20)
at com.java.school.Main.main(Main.java:313)
不幸的是,我不知道我做錯了,因爲Eclipse在運行前沒有指出它。有人能指出我正確的方向嗎?有沒有另外一種方法可以做到這一點?
您正在對列表進行排序,儘管它沒用,但是使用了正確的比較器。然後你調用min(),你必須這樣做,但用null作爲比較器。 –