【问题标题】:Extending a java comparator to compare a specific class implementing the interface it compares for扩展 java 比较器以比较实现它所比较的​​接口的特定类
【发布时间】:2013-02-26 20:55:09
【问题描述】:

我有一个这样的比较器:

public class XComparator implements Comparator<X>, Serializable {
}

目前用于对 Y 实现 X 的 Y 对象列表进行排序

我想为 Y 创建一个扩展 XComparator 的比较器,以便我可以根据 Y 的布尔数据成员进行比较,然后调用 super.compare。

我尝试了几种不同的方法,但似乎都没有。这甚至可能吗?

【问题讨论】:

  • 为什么要扩展?只需创建一个新的并使用现有的。

标签: java inheritance interface comparator


【解决方案1】:

无法扩展XComparator 并将Comparator 上的泛型参数更改为Y,但您可以创建一个YComparator 类,它在内部只有一个XComparator 并委托给它。比如:

public class YComparator implements Comparator<Y>, Serializable {
    private XComparator xComparator = new XComparator();

    @Override
    public int compare(Y y1, Y y2) {
         // compare y1.booleanData with y2.booleanData
         if (...)
             ...;

         // else otherwise:
         return xComparator.compare(y1, y2);
    }
}

【讨论】:

    【解决方案2】:

    使用委托而不是继承。

    您的 YComparator 应该包含并委托给 XComparator。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-29
      • 1970-01-01
      相关资源
      最近更新 更多