Los tutoriales de Java dicen lo siguiente:
Si una metaanotación @Target no está presente en un tipo de anotación T , entonces una anotación de tipo T puede escribirse como un modificador para cualquier declaración excepto una declaración de parámetro de tipo.
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/annotation/Target.html
Otros manuales dicen que si @Target no está presente, se puede usar una anotación en cualquier lugar excepto en los escenarios TYPE_USE o TYPE_PARAMETER.
No estoy muy seguro de qué significa "declaración de parámetros" en ese caso. Esta clase se compila y la anotación "@Everywhere" está presente realmente en todas partes, sin ninguna anotación @Target. Incluye operaciones de conversión, parámetros lambda y declaraciones genéricas.
import java.util.ArrayList; import java.util.function.Predicate; @interface EveryWhere{} public @EveryWhere class AnnotedEveryWhere<@EveryWhere T> extends @EveryWhere Object{ @EveryWhere int i = 0; @EveryWhere <@EveryWhere T> String method(@EveryWhere ArrayList<@EveryWhere String> array) { @EveryWhere Predicate<@EveryWhere ArrayList<@EveryWhere String>> pred = (@EveryWhere ArrayList<@EveryWhere String> lambdaParameter)->{ @EveryWhere ArrayList<@EveryWhere String> insideLambda = new @EveryWhere ArrayList<@EveryWhere String>(); return (@EveryWhere boolean) true;}; return (@EveryWhere String) "String"; } }Depende de la versión de Java. Java SE 18 dice
Si una meta-anotación @Target no está presente en una interfaz de anotación T, entonces se puede escribir una anotación de tipo T como un modificador para cualquier declaración.
Desafortunadamente, https://javaalmanac.io no hace diferencias al nivel de detalle necesario para saber en qué versión cambió.