java.lang.ClassCastException in Arrays.sort 调用虽然实现 Comparabl



我正在尝试使用 Arrays.sort 对矩形数组进行排序。类Rectangle实现Comparable<Rectangle>,我已经重写了compareTo()方法。这是两个类:矩形和测试器类。

public class Rectangle implements Comparable<Rectangle> {
  private int length;
  private int width;
  public Rectangle(int length, int width) {
    this.length = length;
    this.width = width;
  }
  public int getLength() {
    return length;
  }
  public int getWidth() {
    return width;
  }
  public int getPerimeter() {
    return (2*length) + (2*width);
  }
  public int compareTo(Rectangle x) {
    int p2 = ((Rectangle)x).getPerimeter();
    return this.getPerimeter()-p2;
  }
  public String toString() {
    return "Perimeter: " + this.getPerimeter();
  }
}

import java.util.*;
public class Test {
public static void main(String[] args) {
  Rectangle[] rectangles = new Rectangle[4];
  rectangles[0] = new Rectangle(3, 4);
  rectangles[1] = new Rectangle(2, 6);
  rectangles[2] = new Rectangle(2, 2);
  rectangles[3] = new Rectangle(1, 1);
  for (Rectangle x : rectangles) {
    System.out.println(x.getPerimeter());
  }
  Arrays.sort(rectangles);
}

但是,我不断收到一条错误消息:

线程"main"中的异常 java.lang.ClassCastException:矩形不能强制转换为 java.lang.Comparable。

有人可以帮助我看到我做错了什么吗?

Exception in thread "main" java.lang.ClassCastException: Rectangle cannot be cast to java.lang.Comparable.

可能您在主类中的矩形版本没有可比性。 确保您引用的类 Rectagle 是您在上面显示的类。

确保正确生成类。我建议使用 IDE 来构建类,并进行干净的构建应该可以解决此问题。

最新更新