Плохой пример в документации 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,

Другие вопросы по тегам