Вопрос новичка здесь.Я пытаюсь учить себя, и иногда одиночный маршрут может быть неприятным.Я работаю над проблемой в книге Ляна «Введение в программирование на Java», 8-е издание (Упражнение 14.1), где мне нужно изменить класс GeometricObject для реализации Comparable, а затем определить статический метод «max», чтобы найти больший из двух объектов GeometricObject.Затем я должен написать тестовую программу, которая использует этот метод max, чтобы найти больший из двух прямоугольников.Ранее в книге автор велел создать подкласс Rectangle, расширяющий GeometricObject.Я изменил класс GeometricObject для реализации Comparable и создал метод max.Затем я изменил подкласс Rectangle, чтобы также реализовать Comparable.Я также написал тестовую программу.
Но Eclipse дает мне Big Red X, объявив класс моего Rectangle: «Сопоставимый интерфейс не может быть реализован более одного раза с разными аргументами: сопоставимыми и сопоставимыми».Вот когда объявление моего класса выглядит следующим образом:
public class Rectangle extends GeometricObject implements Comparable<Rectangle> {
Я попытался удалить параметр в целом:
public class Rectangle extends GeometricObject implements Comparable {
... и сообщение об ошибке меняется на «Comparable is rawtype. Ссылки на универсальный тип Comparable должны быть параметризованы. "Кроме того, в этом случае добавляется вторая ошибка: «Тип Rectangle должен реализовывать унаследованный абстрактный метод Comparable.compareTo (Object)»
Когда я смотрю на примеры такого рода объявлений, они, кажется, всегда используютимя класса как параметр для Comparable в объявлении, фактически, это то, что говорят книги.Так почему же здесь говорится, что я не могу этого сделать?
А что насчет второй ошибки, связанной с методом compareTo ()?Почему на это указывают только когда я удаляю параметр из объявления?Ниже приведен код для класса Rectangle (при необходимости я также могу опубликовать суперкласс GeometricObject):
public class Rectangle extends GeometricObject implements Comparable<Rectangle> {
private double width;
private double height;
public Rectangle() {
}
public Rectangle(double width, double height) {
this.width = width;
this.height = height;
}
public Rectangle(double width, double height, String color, boolean filled) {
this.width = width;
this.height = height;
setColor(color);
setFilled(filled);
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
public double getArea() {
return width * height;
}
public double getPerimeter() {
return 2 * (width + height);
}
/** Implement the compareTo method defined in Comparable */
public int compareTo(Rectangle o) {
if (getArea() > ((Rectangle)o).getArea())
return 1;
else if (getArea() < ((Rectangle)o).getArea())
return -1;
else
return 0;
}
}