当实现者类有自己的compareTo时,List <interface>上的Collections.sort

时间:2016-09-09 00:58:22

标签: java sorting collections polymorphism

我的界面MyInterface和两个类(SummaryDetail)正在实施此目标,并覆盖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

    }

}

1 个答案:

答案 0 :(得分:1)

您需要确保(以编译器知道的方式)列表只包含一种类型的对象,因为您的对象无法相互比较。

因此,您的列表必须是List<Summmary>List<Detail>

也就是说,除非你定义混合元素的顺序,但是这两个类都必须实现public int compareTo(MyInterface o)