Как различные политики хранения влияют на мои аннотации?

Может любой объяснять ясным способом практические различия между java.lang.annotation.RetentionPolicy константы SOURCE, CLASS, и RUNTIME?

Я также не абсолютно уверен, что означает фраза "сдерживающая аннотация".

165
задан stkent 18 January 2015 в 16:18
поделиться

2 ответа

  • RetentionPolicy.SOURCE: Отбрасывать во время компиляции. Эти аннотации не имеют имеют никакого смысла после завершения компиляции завершена, поэтому они не записываются в байткод.
    Пример: @Override, @SuppressWarnings

  • RetentionPolicy.CLASS: Отбрасывать во время загрузки класса. Полезно при выполнении пост-обработки на уровне байткода. Несколько удивительно, что это по умолчанию.

  • RetentionPolicy.RUNTIME: Не отбрасывать. Аннотация должна быть доступной для отражения во время выполнения. Пример: @Deprecated

Source: Старый URL теперь мертв hunter_meta и заменен на hunter-meta-2-098036. На случай, если и это пропадет, я загружаю изображение страницы.

Изображение (Щелкните правой кнопкой мыши и выберите 'Открыть изображение в новой вкладке/окне') Screenshot of Oracle website

200
ответ дан 23 November 2019 в 21:09
поделиться

Согласно вашим комментариям о декомпиляции классов, вот как, по моему мнению, это должно работать:

  • RetentionPolicy.SOURCE: Не появится в декомпилированном классе

  • RetentionPolicy.CLASS: Появляются в декомпилированном классе, но не могут быть проверены во время выполнения с помощью отражения с getAnnotations()

  • RetentionPolicy.RUNTIME: getAnnotations()

52
ответ дан 23 November 2019 в 21:09
поделиться
Другие вопросы по тегам:

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