簡體   English   中英

Java SuperClass和SubClass擴展可比

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM