Java 中的预定义 Annotation 类型

在 Java SE API 中预定义了一系列 Annotation。有的用于 Java 编译器,有的用于 Annotation。

[b][size=x-large]1、用于编译器的 Annotation[/size][/b]

定义在 java.lang 包中的 @Deprecated @Override 和 @SuppressWarnings 注释。

[b]@Deprecated[/b]
@Deprecated 用来标记某个元素不赞成使用。如果应用程序使用的类、方法或字段上添加了 @Deprecated,那么如果在程序中使用了被注释的元素,编译器将会生成警告信息。也可以使用 JavaDoc 的 @deprecated 来标记某个元素不赞成使用,用法和 @Deprecated 类似,不过第一个字母是小写的 d。下面看看例子:

// Javadoc comment follows
/**
* @deprecated
* explanation of why it was deprecated
*/
@Deprecated
static void deprecatedMethod() { }
}


[b]@Override[/b]
@Override 用来标记当前的元素重写父类中的元素。例如:

// mark method as a superclass method
// that has been overridden
@Override
int overriddenMethod() { }


虽然在重写方法的时候这个 Annotation 并没有强制要求添加,但是如果添加了 @Override 标记,当你的重写出现错误的时候,编译器会产生一个错误。

[b]@SuppressWarnings[/b]
这个注释会让编译器隐藏特定的警告信息。例如下面的例子中使用了不推荐的方法,因此编译器会产生警告,但是加上了 @SuppressWarnings 注释后,编译器就会隐藏这个警告信息。

   // use a deprecated method and tell 
// compiler not to generate a warning
@SuppressWarnings("deprecation")
void useDeprecatedMethod() {
// deprecation warning
// - suppressed
objectOne.deprecatedMethod();
}


每个编译器的警告都有特定的分类。Java 语言规范列出了两个分类:deprecation 和 unchecked 分类,想要隐藏多个分类下的警告信息,可以使用下面的语法:

@SuppressWarnings({"unchecked", "deprecation"})


[b]@SafeVarargs[/b]
@SafeVarargs 注释只能用于可变长参数的方法或构造方法上,并且方法必须为 final 或 static,否则编译会报错。如果开发者确认可变长参数在使用泛型类的时候,不会产生潜在的安全问题,那么可以使用这个注释来隐藏编译器的警告信息。
@FunctionalInterface
@FunctionalInterface 是在 Java 8 中引入的新注释,表明被注释的接口是“函数式接口”。

[b][size=x-large]2、用在 Annotation 上的 Annotation[/size][/b]

用于 Annotation 的 Annotation 被称为元 Annotation,它们定义在 java.lang.annotation 包中。

[b]@Retention[/b]
被 @Retention 注释的 Annotation 将会被指定存储的方式:

RetentionPolicy.SOURCE 被注释的 Annotation 只存在于源码中,会被编译器忽略。
RetentionPolicy.CLASS 被注释的 Annotation 会被编译器读取,但是会在运行时被虚拟机忽略。
RetentionPolicy.RUNTIME 被注释的 Annotation 在运行时会被虚拟机读取。

[b]@Documented[/b]
使用 Java 文档生成工具生成文档的时候,被 @Documented 注释的 Annotation 将会生成文档,默认情况下,Annotation 不会生成文档。

[b]@Target[/b]
@Target 将会指定 Annotation 将会被允许使用在哪些 Java 元素上。@Target 可以使用下面的值:

ElementType.ANNOTATION_TYPE 可以用在 Annotation 上。
ElementType.CONSTRUCTOR 可以用在构造方法上。
ElementType.FIELD 可以用在成员变量上。
ElementType.LOCAL_VARIABLE 可以用在局部变量上。
ElementType.METHOD 可以用在方法上。
ElementType.PACKAGE 可以用在包声明上。
ElementType.PARAMETER 可以用在方法的参数上。
ElementType.TYPE 可以用在类的任何元素上。

[b]@Inherited[/b]
@Inherited 注释的 Annotation 具备继承性(默认是不具备的)。如果 @Inherited 注释的 Annotation 用于某个类上,那么这个类的子类也被继承了父类的 Annotation。

[b]@Repeatable[/b]
@Repeatable 是 Java 8 引入的,被 @Repeatable 注释的 Annotation 就是可重复 Annotation,即在同一个 Java 元素上可以使用相同的 Annotation 注释多次。

文章来源:[url]http://www.aptusource.org/2014/03/predefined-annotation-types/[/url]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值