Может любой объяснять ясным способом практические различия между java.lang.annotation.RetentionPolicy
константы SOURCE
, CLASS
, и RUNTIME
?
Я также не абсолютно уверен, что означает фраза "сдерживающая аннотация".
RetentionPolicy.SOURCE
: Отбрасывать во время компиляции. Эти аннотации не имеют имеют никакого смысла после завершения компиляции завершена, поэтому они не записываются в байткод.
Пример:@Override
,@SuppressWarnings
RetentionPolicy.CLASS
: Отбрасывать во время загрузки класса. Полезно при выполнении пост-обработки на уровне байткода. Несколько удивительно, что это по умолчанию.
RetentionPolicy.RUNTIME
: Не отбрасывать. Аннотация должна быть доступной для отражения во время выполнения. Пример:@Deprecated
Source:
Старый URL теперь мертв
hunter_meta и заменен на hunter-meta-2-098036. На случай, если и это пропадет, я загружаю изображение страницы.
Изображение (Щелкните правой кнопкой мыши и выберите 'Открыть изображение в новой вкладке/окне')
Согласно вашим комментариям о декомпиляции классов, вот как, по моему мнению, это должно работать:
RetentionPolicy.SOURCE
: Не появится в декомпилированном классе
RetentionPolicy.CLASS
: Появляются в декомпилированном классе, но не могут быть проверены во время выполнения с помощью отражения с getAnnotations()
RetentionPolicy.RUNTIME
: getAnnotations()