Что преимущества использования являются @Deprecated нотацией в интерфейсе только?

3 ответа

Я считаю, что это недостаток самого языка Java, и бессмысленно указывать метод в интерфейсе как устаревший через аннотацию и не допускать, чтобы метод считался устаревшим в реализующий класс.

Было бы лучше, если бы @ устаревший метод был унаследован. К сожалению, похоже, что Java не поддерживает это.

Подумайте, как инструментальные средства, такие как IDE, обрабатывают эту ситуацию: если тип переменной объявлен как интерфейс, тогда методы @deprecated могут быть отображены с зачеркиванием . Но если тип переменной объявлен как реализующий класс, а сигнатура класса не включает @deprecated, тогда метод будет отображаться без зачеркивания.

Фундаментальный вопрос: что означает, что метод устарел в интерфейсе, но не в реализующем классе (или в расширяемом интерфейсе)? Единственное разумное намерение - исключить этот метод для всего, что находится ниже интерфейса в иерархии классов. Но язык не поддерживает такое поведение.

8
ответ дан 4 December 2019 в 08:34
поделиться

@Deprecated - это документация. Если люди кодируют интерфейс, вы можете пометить определенные аспекты этого интерфейса как устаревшие. Таким образом, люди знают, что не стоит его использовать.

Класс реализации интерфейса - это деталь. Метод в этом классе удовлетворяет интерфейсу, но не может быть объявлен устаревшим сам по себе. Отказ от использования этого метода может быть подходящим или неприемлемым.

Создание нового класса, реализующего интерфейс, означает, что вам необходимо реализовать устаревшие методы. Вероятно, они должны работать, если вы не знаете, что клиенты класса не используют устаревшие методы. Например, если вы создаете контейнер HTTP-сервлетов, вам необходимо реализовать метод HttpServletResponse.encodeUrl () , даже если он устарел в пользу encodeURL () . Который'

11
ответ дан 4 December 2019 в 08:34
поделиться

на мой взгляд, это спорный : устаревший интерфейс метода не должен использоваться независимо от его реализации (пожалуйста, предоставьте контрпримеры, если нет)

6
ответ дан 4 December 2019 в 08:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: