Почему RetentionPolicy для @deprecated является RUNTIME? - PullRequest
14 голосов
/ 24 октября 2009

Почему во время выполнения кому-то интересно знать, что метод устарел? Кто-нибудь может дать мне несколько примеров?

Ответы [ 6 ]

7 голосов
/ 26 октября 2009

Существует несколько структур и инструментов, которые создают экземпляры объектов для работы с ними.

Например, многие редакторы пользовательского интерфейса JavaBean создают экземпляры bean-компонентов и взаимодействуют с ними, когда пользователь манипулирует пользовательским интерфейсом, который они проектируют.

Наличие аннотации @Deprecated, доступной во время выполнения, позволяет таким инструментам отмечать устаревшие методы, события, свойства для пользователя.

2 голосов
/ 24 октября 2009

Вы предполагаете, что @deprecated представляет интерес только на этапе компиляции (IDE, компилятор), но это не слишком далеко от сценариев обработки изображений, когда вам требуется эта информация.

Например, IDE может информировать вас о количестве сайтов вызовов для устаревшего метода, но как вы будете определять процент времени, которое ваше приложение тратит на устаревшие методы?

1 голос
/ 25 октября 2009

Пара практических применений, которые приходят на ум:

С Velocity вы можете иметь пользовательский Uberspector , который записывает фактические вызовы из шаблонов Velocity в любой устаревший метод, а затем просто читая журнал, вы можете увидеть, где используется метод и вы можете пойти и отредактировать его.

С Wicket вы можете иметь политику безопасности, которая запрещает создание экземпляров любого класса на основе содержимого .class, чтобы можно было создать систему, которая предотвращает создание экземпляров @Deprecated классов, если вы ' Вы не администратор.

1 голос
/ 25 октября 2009

Хороший вопрос, и я стремлюсь придумать убедительный сценарий. Все, что у меня есть, это то, что я могу представить приложение, которое использует загрузчик классов, который не позволяет использовать устаревший код. Это потребует RetentionPolicy.RUNTIME.

Это все, что у меня есть ...

1 голос
/ 24 октября 2009

Время выполнения - это время разработки другого, например, при написании кода, который использует API.

0 голосов
/ 24 октября 2009

Представьте, что вы компилируете MyClass.class с устаревшими методами. Если ваши аннотации @Deprecated были утеряны, ваша IDE или компилятор не смогли предупредить вас, когда вы вызываете эти методы из другого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...