[JSR308] Annotation Inheritance & annotation's composition

Maxim Kizub mkizub at gmail.com
Mon Oct 6 03:22:48 EDT 2008


Annotation inheritance (with multiple super-annotations) may also be
used as a composition for annotations.
For example, if we have @Public, @Static, @Final annotations, one may
add an annotation
@Singleton extends @Public, @Static, @Final
and use it instead of specifying all these three annotations.

The annotation inheritance may also be used for specifying default
final (sealed) values of super-annotations. Like
@Access { int value(); }
final @Public extends @Access { final int value() default 1; }
final @Private extends @Access { final int value() default 0; }

Thus, the inheritance of annotations rises a question, if we have
@Public class Foo {}
and take
shell it return the instance of @Public annotation, or null?
And if we have
@Public @Access(0) class Foo {}
shell it yield a compilation-time error (since @Access is not allowed
to have multiple annotations
attached to one item)? Shell the

@Singleton extends @Public, @Static, @Final
@MyAPI extends @Public, @Serializable
@Singleton @MyAPI class Foo {}
cause the compile-time error (since both provide a value for @Public)
? Or it shell be treated by compiler as
@Public @Static @Final @Serializable class Foo {}

  Maxim Kizub

More information about the JSR308 mailing list