Почему во время работы кому-то интересно узнать, что метод устарел? Могут ли некоторые дать мне несколько примеров?
Почему RetentionPolicy для @deprecated является RUNTIME?
Ответ 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
, если вы не админ.