Loading... ## 注解接口 注解是由注解接口来定义的 ```java modifiers @interface AnnotationName{ element1 element2 } ``` 对于其中的每一个元素,声明时应该按照以下两种形式 ```java //normal type elementName(); //with default value type elementName() default value; ``` 比如一个“苹果”注解 ```java public @interface Apple { String color() default "red"; int count(); } ``` <div class="tip inlineBlock warning simple small"> 所有的注解接口都隐式地扩展自java.lang.annotation.Annotation接口,由于Java不支持多重继承机制,所以你无法扩展注解接口 </div> 注解的类型可以是下列之一 * 基本类型 * String * Class * enum类型 * 注解类型 * 由以上类型组成的数组(数组组成的数组不是合法的类型,当然,你不会想这么做) ## 注解 注解在使用时的格式是`@AnnotationName(element1 = value1, element2 = value2,...)`,其中元素的顺序无关紧要,当其中某个元素的值未指定,那么就会使用声明的默认值 <div class="tip inlineBlock error"> 需要注意的时,在使用默认值时,默认值并不和注解存储在一起。简单的说,假如你修改了某个注解接口中的默认值,之后重新编译接口,之前使用了该接口的文件将使用新的默认值,就算它没有被重新编译 </div> 在使用时如果如果没有指定元素那么就不需要使用括号了,比如`@Annotation`,这样的注解又称为标记注解,另一种快捷的方式叫单值注解,如果注解的元素中只有一个,并且具有一个特殊的名字`value`,就可以使用`@Annotation("value1")` ## 注解声明 注解可以出现在许多地方,比如以下 * 包 * 类(包括 enum) * 接口(包括注解接口) * 方法 * 构造器 * 实例域(包含 enum 常量) * 局部变量 * 参数变量 * 类型参数 对于类和接口,需要将注解放置在class和interface关键字的前面 对于变量,需要将注解放置在类型的前面 泛化类或方法中的类型参数可以像下面这样被注解 `public class Name<@Annotation V>` 包是在文件package-info.java中注解的 © 允许规范转载 打赏 赞赏作者 微信 赞