Подтвердить что ты не робот

Почему RetentionPolicy для @deprecated является RUNTIME?

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

4b9b3361

Ответ 1

Есть несколько фреймворков и инструментов, которые создают объекты для работы с ними.

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

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