Поскольку значения аннотаций интерпретируются компилятором, а не во время выполнения, они должны быть константами времени компиляции;FINDALL
не обязательно должно быть public
, но оно должно быть static final
, чтобы сделать его константой.
Технически аннотация находится вне класса, к которому она применяется, поэтому классчлен не внутри.Теоретически вы можете иметь несколько определений классов в одном файле (JLS рекомендует, чтобы компиляторы запрещали это, и все известные мне компиляторы Java), и поэтому требуется конкретное имя.