3.使用@Documented

这个注解用于指定被修饰的注解类将被javadoc工具提取成文档,如果定义注解类时使用了这个注解修饰,则所有使用该注解修饰的程序员苏API文档将会包含该注解说明。

例如:@Documentedpublic @interface Testable{}

4.使用@Inherited

这个注解指定被他修饰的注解将具有继承性——如果某个类使用了@Xxx,则其子类将自动被@Xxx修饰

5.使用@Result

作用是在同一个程序元素前使用多个相同类型的注解在java8之前只能通过@Results配置,

java8简化了它的写法例如:

@test(age=5)@test(age=8)public void resultTest(){}

6.使用类型注解

创建类实例new@InternedMyObject();

类型映射myString = (@NonNullString) str;

implements 语句中class UnmodifiableList<T> implements@ReadonlyList<@Readonly T> { ... }

throw exception声明void monitorTemperature() throws@CriticalTemperatureException { ... }

等等地方都可以用类型注解

新增ElementType.TYPE_USE和ElementType.TYPE_PARAMETER(在Target上)新增的两个注释的程序元素类型 ElementType.TYPE_USE 和 ElementType.TYPE_PARAMETER用来描述注解的新场合。ElementType.TYPE_PARAMETER 表示该注解能写在类型变量的声明语句中。

ElementType.TYPE_USE 表示该注解能写在使用类型的任何语句中(eg:声明语句、泛型和强制转换语句中的类型)。还是那句话,这些注解本身是没有意义的。要靠自己实现类型注解的检查框架,或者第三方,类型注解最大的意义在于,让编译器执行更严格的检查,保证代码更加的健壮。