Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
扩展java comparator以比较实现它所比较的接口的特定类_Java_Inheritance_Interface_Comparator - Fatal编程技术网

扩展java comparator以比较实现它所比较的接口的特定类

扩展java comparator以比较实现它所比较的接口的特定类,java,inheritance,interface,comparator,Java,Inheritance,Interface,Comparator,我有一个这样的比较器: public class XComparator implements Comparator<X>, Serializable { } 公共类XComparator实现可序列化的比较器{ } 当前用于对Y对象列表进行排序,其中Y实现X 我想为Y创建一个扩展XComparator的比较器,这样我就可以基于Y的布尔数据成员进行比较,然后调用super.compare 我尝试过几种不同的方法,但似乎都不管用。这可能吗 不可能扩展XComparator并将Comp

我有一个这样的比较器:

public class XComparator implements Comparator<X>, Serializable {
}
公共类XComparator实现可序列化的比较器{
}
当前用于对Y对象列表进行排序,其中Y实现X

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


我尝试过几种不同的方法,但似乎都不管用。这可能吗

不可能扩展
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);
    }
}
公共类YComparator实现比较器,可序列化{
专用XComparator XComparator=新的XComparator();
@凌驾
公共整数比较(Y y1,Y y2){
//比较y1.booleanData和y2.booleanData
如果(…)
...;
//否则:
返回xComparator.compare(y1,y2);
}
}

使用委派而不是继承


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

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