[英]Java SuperClass and SubClass extending comparable
我正在執行此作業,我們必須創建2種類型的對象,
public class Person implements Cloneable, Comparable<Person>
和
public class Book implements Cloneable, Comparable<Book>
該程序的主要任務是使用其自己的比較函數對兩種類型進行排序,如下所示:
compareTo(Person o)
compareTo(Book o)
因此,我在main函數中創建了如下的2 ListArray,用於存儲book和person對象,如下所示:
List<Book> bookArray = new ArrayList<Book>();
List<Person> peopleArray = new ArrayList<Person>();
我在另一個類中實現了排序算法,如下所示:
public class Sort{
Comparable<Object>[] values;
public Sort(List<Object> inputArray) {
this.values = (Comparable<Object>[]) inputArray.toArray();
}
public doSort() {
//sort implementation...
}
問題是使用上面的數組調用此函數時
Sort sorter = new Sort(peopleArray);
sorter.doSort();
Eclipse顯示錯誤,提示“構造函數Sort(List)未定義”。 我在這里做錯了什么? 先感謝您。
您可以將任何類實例傳遞給Object類型。 但List不是List的父級。 這些只是兩種不同的類型。
你可以說
public Sort(List<? extends Object> inputArray)
這樣它將接受任何類型。
只是因為你被點名了場“personArray”並不能使一個數組-你傳遞一個List
時,構造函數聲明為預期的數組。
我建議您除非絕對必要,否則不要使用數組。 使用集合代替,因為他們是這么容易對付和,流行的看法相反,性能差異可以忽略不計。
如果您從代碼中刪除所有數組,並添加一些泛型,那么它們將全部起作用:
public class Sort<T extends Comparable<T>> {
private List<T> values;
public Sort(List<T> values) {
this.values = values;
}
public void doSort() {
Collections.sort(values);
}
}
請注意,如果排序就是全部,那么整個類將增加很少的價值。 您的客戶代碼可以只編寫以下一行代碼:
Collections.sort(values);
它不是很清楚,但是如果正確,那么您可以使用另一個新類進行排序,這很可能實現了COMPARATOR。
所以在我們的例子中Sort class應該是
Class Sort implemets Comaparator<Person> {
public void Compare(Object 01,Object 02) {
return (Person)o1.comapareTo(Person)o2;
}
然后在main
,請致電
Collections.sort(list,new Sort());
我也需要做書。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.