Java 将比较器与泛型一起使用

Java 将比较器与泛型一起使用,java,generics,comparator,Java,Generics,Comparator,我尝试使用一种通用方法对数组进行排序。我在Lab6Sort(octArr)上收到一个错误 public static void main(String[] args) { Shape[] octArr = new Shape[10]; for(int i = 0; i < 10; i++){ octArr[i] = new L6MPerRegOct(Math.floor(Math.random() * 1000) / 10); } La

我尝试使用一种通用方法对数组进行排序。我在
Lab6Sort(octArr)上收到一个错误

 public static void main(String[] args) {
    Shape[] octArr = new Shape[10];

    for(int i = 0; i < 10; i++){
        octArr[i] = new L6MPerRegOct(Math.floor(Math.random() * 1000) / 10);
    }

    Lab6Sort(octArr);
}
.
.
 public static <AnyType> void Lab6Sort (AnyType [] arr, Comparator<? super AnyType> cmp)
publicstaticvoidmain(字符串[]args){
形状[]octArr=新形状[10];
对于(int i=0;i<10;i++){
octArr[i]=新的L6MPerRegOct(数学地板(数学随机()*1000)/10);
}
Lab6Sort(octArr);
}
.
.

publicstaticvoidlab6sort(AnyType[]arr,Comparator您需要向它传递一个
比较器的实例,例如

Lab6Sort(octArr, new Comparator<Shape>() {
    @Override
    public int compare(Shape o1, Shape o2) {
        return 0;
    }
});
Lab6Sort(octArr,新的比较器(){
@凌驾
公共整数比较(形状o1,形状o2){
返回0;
}
});
或者在一个单独的类中定义比较器,如果您想重用它的话

public class ShapeComparator implements Comparator<Shape> {
    @Override
    public int compare(Shape o1, Shape o2) {
        return 0;
    }
}
公共类ShapeComparator实现Comparator{
@凌驾
公共整数比较(形状o1,形状o2){
返回0;
}
}
类形状比较器实现比较器{
@凌驾
公共整数比较(形状o1,形状o2){
返回0;
}
}

这个例子需要展示
AnyType
Shape
之间的关系。我知道这是可以猜测的,但是OP对于stackoverflow来说显然是新的,它将预示着他们可以问一些精心设计的问题,这些问题可以由专家回答,而不需要太多的支持和支持。当他们想问更多复杂的问题时,这一点很重要ex-questions.@Misarableable他使用
AnyType
作为泛型
T
,所以这很好。事实上这是真的@radoh,我收回我的评论。
AnyType
@brso05我相信其他绅士的问题是,在理想世界中,你会想把代码示例复制粘贴到你的IDE中,然后自己看看是否有效ks/没有。对于这个问题中的给定示例,您会收到一个编译错误,因为
L6mperLegoct
类型未定义。我最初的评论是基于这样一种想法,即存在一个相当基本的错误,如果OP费心想出一个SCCE的话,它会被OP解决。另一方面,他们可能是n确实对如何定义比较器感到困惑,但如果他们使用更具体的示例代码,他们可能能够更好地表达问题。如果在代码中包含解释,这将是一个更好的答案。
public class ShapeComparator implements Comparator<Shape> {
    @Override
    public int compare(Shape o1, Shape o2) {
        return 0;
    }
}
class ShapeComparator implements Comparator<Shape> {

    @Override
    public int compare(Shape o1, Shape o2) {

        return 0;
    }

}