Daniel Rikowski Daniel Rikowski - 13 days ago 6
Java Question

Which types can be used for Java annotation members?

Today I wanted to create my first annotation interface following this documentation and I got the compiler error "Invalid type for annotation member":

public @interface MyAnnotation {
Object myParameter;
^^^^^^
}


Obviously
Object
cannot be used as type of an annotation member. Unfortunately I could not find any information on which types can be used in general.

This I found out using trial-and-error:


String
-->
Valid

int
-->
Valid

Integer
-->
Invalid (Surprisingly)

String[]
-->
Valid (Surprisingly)

Object
-->
Invalid


Perhaps someone can shed some light on which types are actually allowed and why.

Answer

It's specified by section 9.6.1 of the JLS. The annotation member types must be one of:

  • primitive
  • String
  • Class
  • an Enum
  • another Annotation
  • an array of any of the above

It does seem restrictive, but no doubt there are reasons for it.

Also note that multidimensional arrays (e.g. String[][]) are implicitly forbidden by the above rule.

Comments