如何在java中为超类和子类实现Comparator

时间:2014-06-03 14:12:23

标签: java comparator

我有超类( ArticleSummary )和子类(文章)。

在控制器中,我收到 ArticleSummary 类型的列表。

我的要求是我想要对列表进行排序,其中一些属性(比如 id )属于ArticleSummary,而某些属性(比如日期,状态 ...)属于制品

任何机构都可以建议我如何达到这个要求。

我想使用比较器,否则在java中有这种要求的最佳方法。

先谢谢。

2 个答案:

答案 0 :(得分:1)

如果您有ArticleSummary个对象的列表,则无法访问Article个字段。如果您的列表实际包含Article个对象,那么在Article类中实现compareTo并按super.id进行比较应该有效。

请记住ArticleArticleSummary,但ArticleSummary不是Article s

答案 1 :(得分:0)

您可以实施Comparable界面(见下文),然后当您拥有list ArticleSummaryCollections.sort(list);个对象时,可以使用class ArticleSummary implements Comparable<ArticleSummary> { @Override public int compareTo(ArticleSummary o) { //here this is of class ArticleSummary //so you can compare only fields of the class ArticleSummary //no matter what object o is return 0; } } class Article extends ArticleSummary { @Override public int compareTo(ArticleSummary o) { if (o instanceof Article) { //here both this and o are of class Article //so you can compare fields of both classes ArticleSummary and Article Article otherArticle = (Article) o; //to use other object as an Article return 0; } else { //here this is of class Article but o is of class ArticleSummary //therefore you can only compare fields of class ArticleSummary return 0; } } }

对其进行排序

这里是实现接口的代码:

{{1}}