我的界面MyInterface
和两个类(Summary
,Detail
)正在实施此目标,并覆盖compareTo
。
第三课DetailMe
正在扩展Detail
另一个班级(MyApi
)正在使用List<MyInterface>
,抱怨Collections.sort
,我做错了什么?
public class Summmary implements MyInterface, Comparable<Summary> {
private Detail detail;
public Summary(Detail detail) {
this.detail = detail;
}
// properties
// methods
@Override
public int compareTo(Summary o) {
// Do work
}
}
==
public class Detail implements MyInterface, Comparable<Detail> {
// properties
// methods
@Override
public int compareTo(Detail o) {
// Do Detail work
}
}
==
public class DetailMe extends Detail {
// Do work
}
==
public class MyApi {
private List<MyInterface> myList;
public MyApi(List<MyInterface> myList) {
this.myList = myList
Collections.sort(this.myList); // COMPLIATION ERROR
}
}
答案 0 :(得分:1)
您需要确保(以编译器知道的方式)列表只包含一种类型的对象,因为您的对象无法相互比较。
因此,您的列表必须是List<Summmary>
或List<Detail>
。
也就是说,除非你定义混合元素的顺序,但是这两个类都必须实现public int compareTo(MyInterface o)
。