0
我有一些实现接口的对象,所以可以使用某些方法(getTime,getValue等)。接口和可比较对象
但是我也想强制这些对象使用Comparable以相同的方式排序,但我无法在界面中定义实体(至少在Android Java中)。
我该怎么办?
我有一些实现接口的对象,所以可以使用某些方法(getTime,getValue等)。接口和可比较对象
但是我也想强制这些对象使用Comparable以相同的方式排序,但我无法在界面中定义实体(至少在Android Java中)。
我该怎么办?
您可以在界面中使用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
你说的没有签名的一部分呢?默认实际上是什么意思? –
如果我已经实现了两个具有相互矛盾的可比较方法的接口,该怎么办? –
@ArukaJ我的意思是,''''''''''''''''''''''''''''''''''''''比较'<...>''''没有''''''''关键字。但用default关键字覆盖''''compareTo'''方法仍然是可能的。您只能覆盖具有相同签名的方法。 –