2016-05-07 41 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'''方法仍然是可能的。您只能覆盖具有相同签名的方法。 –