簡體   English   中英

比較器可以比較兩種不同類型的對象嗎?

[英]Can Comparator compare two objects of different type?

我有兩個類Person和Employee對象。 這兩個類都有共同的屬性年齡。 我已經將兩個這兩個類的對象添加到Arraylist中,現在我想要兩個寫一個Comparator並將它傳遞給Collections類的sort方法。 並希望列表根據年齡進行排序。 我這樣做只是為了更清楚地使用Java中的Comparable和Comparator。

編輯:原因為什么我問這個問題是我不清楚Comparator和Comparable。 我在某處讀到如果Class實現了Comparable,那么它就無法與其他類的對象進行比較(因為類強制轉換異常)。

現在,如果我在Employee和Person中創建關系,那么就不需要實現Comparator(除非我想根據名稱或這些類的其他公共屬性進行排序)。

再一次,我已經問過這個問題,以便更清楚地了解Comparator和Comparable。

直到現在,我能夠理解的是,如果我想對多個參數進行排序,那么我應該實現Comparator並將其傳遞給Collections.srot()。

或者如果我無法控制正在排序的對象類,那么自定義排序我應該實現Comparator。 (糾正我,如果我錯了或我錯過了什么)

編輯

我想現在我理解Comparable和Comparator的使用。 為了確保我得到了正確的概念,這就是我所理解的:如果我想比較不同類的兩個對象(並且沒有關系),那么我應該使用原始比較器並覆蓋比較方法。 有人實現Comparator而不是Comparable的另一個原因是在排序方面具有靈活性。 我從自然排序中理解的是在CompareTo方法中由Class實現的邏輯。

希望我對所有這些觀點都是正確的。

您可以定義名為Ageable和Employee的接口,Person可以實現此接口。 您還可以定義一個抽象類(而Employee和Person將從抽象類繼承)具有相同的效果。 請注意,出於這個原因你也可以使用普通類,你可以做任何你需要的事情。

此外,如果沒有理由說員工不是一個人(例如機器人在辦公室工作),那么員工可以從Person繼承。

我會讓一個員工成為Person的子類。 (假設您的所有員工都是人員)然后您可以創建Comparator<Person>

您應該創建一個接口AgeProvider

public interface AgeProvider {
    int getAge();
}

PersonEmployee都應該實現AgeProvider 現在,您可以實現比較2 AgeProvider

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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