Из Java doc:
CLASS: Аннотации должны быть записаны в файл класса компилятором, но не должны сохраняться виртуальной машиной во время выполнения.
RUNTIME: Аннотации должны быть записаны в файл класса компилятором и сохранены виртуальной машиной во время выполнения, так что они могут быть прочитаны рефлексивно.
ИСТОЧНИК: Аннотации должны быть отброшены компилятором.
Я понимаю использование RUNTIME (для использования аннотации с отражением) и CLASS (для компилятора), но не понимаю, когда может быть полезно использовать
@Retention(RetentionPolicy.SOURCE)
Можете объяснить?
Этот ответ имеет смысл - https://stackoverflow.com/a/43910948/3009968.
Вы не хотели бы включать зависимость, желаемые эффекты которой осознаны даже, прежде чем код компилируется. Например, @SuppressWarnings
, Вы не хотели бы включать зависимость, которая используется компилятором, чтобы скажем, сгенерировать код, но нисколько не требуется во время времени выполнения. Например, как упомянуто уже в предыдущем ответе - пружинный кенгуру .