[JSR308] Annotation ambiguity
Michael Ernst
mernst at cs.washington.edu
Sun May 24 18:03:55 EDT 2009
Alexey-
> Please consider this example:
>
> class S {
> @Deprecated int foo() { return 0; }
> }
>
> Question:
> Does the @Deprecated annotation apply to the method foo, or method return type?
>
> According to JLS, since the Deprecated class lacks any @Target annotations, it can be applied to any element.
> Therefore, it applies to both 'int' data type and method foo.
You are correct. (This is specified in section 2.3 of the Type Annotations
specification, and further discussed in appendix B.4.)
> Which does not make any sense, in my opinion.
You have discovered a bug in the definition of the Deprecated class.
Ideally, each annotation should have a @Target meta-annotation. If there
was one, then @Deprecated would apply only to the method foo.
However, the given behavior does not cause any problems. Any annotation
processor that processes the @Deprecated annotation will not even look in
the type annotation position, and the existence of an extra annotation in
that position will not interfere with any other annotation processor
either.
-Mike
More information about the JSR308
mailing list