The last retention type will be the most frequent used. There are also other annotations that can be used on annotation declarations. The @Target annotation can be used to restrict the use of the annotation to certain locations. The argument to this annotation is either a single java.lang.annotation.ElementType value or an array of these values. There is a good reason to restrict the use of annotations. It is much better to get a compilation time error when we place an annotation in the wrong place than hunting during runtime why the framework ignores our annotation.