Java 使用比较器对数组排序时发生ClassCastException

Java 使用比较器对数组排序时发生ClassCastException,java,comparator,Java,Comparator,我喜欢这门课比较Y坐标(降序) 我有预定义的Point类 在main类中,我发送比较Y数组,它是保持点(type=Point)array.sort(array)它给了我ClassCastExeption 如何解决这个问题 公共类CompareY实现Comparator{ 公共比较{ } @凌驾 公共整数比较(点a1、点a2){ 如果(a1.y>a2.y) 返回-1; 否则如果(a1.y

我喜欢这门课比较Y坐标(降序) 我有预定义的Point类

在main类中,我发送比较Y数组,它是保持点(type=Point)
array.sort(array)它给了我
ClassCastExeption

如何解决这个问题


公共类CompareY实现Comparator{
公共比较{
}
@凌驾
公共整数比较(点a1、点a2){
如果(a1.y>a2.y)
返回-1;
否则如果(a1.ya2.x)
返回-1;
其他的
返回0;
}
}
该方法需要实现
Comparable
的类型。如果要创建
CompareY
对象数组,请注意
CompareY
不实现
comparebe
,因此在运行时会得到
ClassCastException
,因为
CompareY
不能转换为
C可比较的
。同样,如果您正在创建一个
对象的
数组
,您仍然会得到一个
类异常
,因为
没有实现
可比较的

要解决此问题,请执行以下操作:

  • 创建
    对象的
    数组
  • 使用采用
    比较器的方法
  • 例如:

    Point[] points = new Point[]{new Point(..),new Point(...)};
    Arrays.sort(points,new CompareY());
    

    或者,您可以让
    类实现
    可比较
    ,并定义
    的自然顺序。然后您可以使用
    数组。排序(对象[]a)
    方法直接执行。

    您能指出哪里出现错误吗?并向我们展示如何使用您的构造。顺便说一句,您可以通过在每行末尾添加空格来实现问题中的换行。您能显示错误出现的代码吗?看起来您正在尝试对包含不同类型对象的
    对象
    数组进行排序类型。如果
    x
    y
    为int,则可以使用
    return a1.y-a2.y
    避免冗长,如果不是,则使用
    Math.signum()
    将有所帮助。@serdar查看我的答案,了解为什么会出现
    ClassCastException
    以及如何解决此问题。我认为您发布的问题已经完成,无需从您的角度发布额外的代码来缩小问题范围。+1ı已经在point类中实现了类似的接口,并且工作正常。ıused Array.sort(points,new CompareY());有效。谢谢你的回答。@serdarözer我将此作为问题的一部分发布。在实现了
    Comparable
    之后,你是否仍然得到
    ClassCastException
    ?你能用创建
    数组的代码编辑你的问题并将其传递给
    数组。请排序
    方法吗?@serdarözer就是这样说即使在实现了
    Comparable
    ,您也面临着这个问题?我认为这是不可能的。尽管如此,我相信我的答案(双关语的意思)为您指明了正确的方向,所以不要忘记投票并接受答案:)不,只需在这段代码数组之后编写。排序(points,new CompareY());和ı接受了答案,但ı没有足够的声望来投票:-)@serdarözer My bad。我一直忘记投票限制,直到达到某个代表为止;)
    Point[] points = new Point[]{new Point(..),new Point(...)};
    Arrays.sort(points,new CompareY());