2016-05-07 63 views
0

我有一些實現接口的對象,所以可以使用某些方法(getTime,getValue等)。接口和可比較對象

但是我也想強制這些對象使用Comparable以相同的方式排序,但我無法在界面中定義實體(至少在Android Java中)。

我該怎麼辦?

回答

3

您可以在界面中使用default關鍵字(這是不是簽名的一部分)定義機構:

public interface MyInterface extends Comparable<MyInterface> { 

    @Override 
    default int compareTo(MyInterface other) { 
     return 0; 
    } 

} 

但是,如果你想在不同的標準進行排序,不時。通過sort方法比較器是一個更好的選擇。

public interface MyInterface { 
    int getTime(); 
    int getValue(); 
} 

然後調用,如:

List<MyInterface> list= ...; 
list.sort((mi1, mi2) -> Integer.compare(mi1.getTime(), mi2.getTime())); // sorts by time 
list.sort((mi1, mi2) -> Integer.compare(mi1.getValue(), mi2.getValue())); // sorts by value 
+0

你說的沒有簽名的一部分呢?默認實際上是什麼意思? –

+0

如果我已經實現了兩個具有相互矛盾的可比較方法的接口,該怎麼辦? –

+0

@ArukaJ我的意思是,''''''''''''''''''''''''''''''''''''''比較'<...>''''沒有''''''''關鍵字。但用default關鍵字覆蓋''''compareTo'''方法仍然是可能的。您只能覆蓋具有相同簽名的方法。 –