Плохой пример в документации Oracle
Я прочитал эту статью Oracle об интерфейсах в Java. Я думаю, что приведенный пример плох. Они используют следующий пример:
public interface Relatable {
public int isLargerThan(Relatable other);
}
public class RectanglePlus implements Relatable {
public int isLargerThan(Relatable other) {
RectanglePlus otherRect = (RectanglePlus) other;
if (this.getArea() < otherRect.getArea()) {
return -1;
}
else if (this.getArea() > otherRect.getArea()) {
return 1;
}
else {
return 0;
}
}
Это приемлемо, чтобы бросить Relatable other
в RectanglePlus
? Думаю, нет. В моем понимании такая реализация потерпит неудачу в случае, если этот класс будет использоваться через ссылку на интерфейс, и кто-то попытается сравнить его с другой реализацией Relatable
это не "на самом деле экземпляр RectanglePlus
, И я думаю, что такое использование интерфейсов допустимо, пока проблема в реализации.
Как вы думаете? Может я чего-то не понимаю?
1 ответ
Ты прав. Этот код может вызвать исключение приведения, если isLargerThan
дается Relatable
это не пример RectanglePlus
(или любой из его детей)
Они должны были проверить класс объекта, переданного с помощью instanceof
,