人手必备!Java8中的注解,你必须知道的几点
全文共3002字,预计学习时长6分钟
海中有大量的注解!
1.5中首次引入了注解。Java注解的目的是允许程序员编写关于其程序的元数据。在中,注解的定义是:“注解是元数据的一种形式,它提供的数据与程序本身无关。”
注解可以在代码的任何地方使用,如在类、方法和变量中使用。从Java 8开始,它也可以用于类型声明。
带注解的代码与程序没有任何直接关系。只有其他程序或JVM可以使用这些信息来实现其目的。
注解的语法
注解是使用字符@和注解名(即@)来声明的。当编译器遍历这个元素时,即可知道这是一个注解。例如:
@
{
上面的注解称为,用于注解类。
注解可以有许多属性。这些属性会在声明注解时以键-值对的形式给出。如:
@(name = ”first name”, age = 35)
() {
注意,这里的是在注解一个方法。如果注解只有一个属性,那么在声明注解时可以跳过该属性的名称。举例如下:
@(“I am the only ”)
() {
一个元素可以有多个注解。例如:
@
@(“ ”)
{
表J2SE 8;相同的注解可以多次用于一个元素,如:
@(“ used”)
@(“ ”)
{
这将在@注解部分进行详细讨论。
Java中预定义的注解
Java附带了一组预定义的注解。Java Core提供的注解如下:
@:这个注解注解其他注解,并指示注解的范围。可能的值包括:
@: 该注解表示一个注解可以应用到的目标元素:
@:此注解可应用于其他注解。这意味着将使用工具记录带注解的元素。
@:默认情况下,注解不会被子类继承。但是如果一个注解被标记为@ ,这意味着当一个类被注解时,这个注解也会被子类继承。此注解仅适用子类。注意,如果一个接口是用那个注解注解的,那么实现类不会继承这个注解。
@:指示不应使用带注解的元素。此注解使编译器生成警告消息,可以应用于方法、类和字段。
@:指示编译器出于某种或某些特定原因不生成警告消息。
@: 该注解通知编译器该元素正在重写超类的一个元素。在重写元素时不强制使用,但有助于编译器在重写未正确完成时生成出错消息,例如,如果子类方法参数与超类参数不同,或者返回类型不匹配。
@: 当应用到一个方法或构造方法时,代码不会对可变参数执行潜在的不安全操作。
重复注解
此注解表明,使用此注解的注解可以多次应用于同一元素。
通过一个例子可以更清楚地理解这个概念。
若要使用这个注解,首先,我们需要定义一个注解,它可用于对类进行重复注解。
@ (.)
@ (.)
@ (.class)
@ () {
();
此处,是一个可重复用于注解一个元素的注解。
接下来,需要定义注解类型。这基本上可称之为注解类型的容器,它必须有注解类型的数组。
@ {
[] value();
现在, 注解可多次应用于任何元素。
@ (“I am the class”)
@ (“I am the class again”)
@ (“I am the class for the third time”)
{
接下来,要检索程序中注解的值,首先要检索容器的数组。数组的每个元素将包含一个值。如:
@ (“I am the class”)
@ (“I am the ”)
@(“I am the the third time”)
{
main( [] args) {
Class = .class
[] = .();
for ( : ) {
rac = () ;
[] = rac.value();
for ( ra : ) {
.out.(ra.value);
当执行上述代码时,输出为:
I am the class
sfor the third time.
类型注解
Java8发布之后,注解可以应用于任何类型的使用。这意味着可在任何使用类型的地方使用注解。例如,当使用新的操作符、类型转换创建类实例时,当使用执行子句、抛出子句等实现接口时,这种形式的注解称为类型注解。
这种类型注解的目的是支持改进的Java程序分析,并确保更强的类型检查。在Java 8发布之前,Java不包含类型检查框架,但是可使用类型注解在Java程序中编写和使用类型检查框架。
例如,假设我们希望在整个程序中都不将某个特定变量赋值为null。我们可以编写一个自定义插件来检查这个并使用自定义注解注解那个特定的变量。变量声明应该是:
@ ;
在编译代码时,编译器会检查潜在的问题,并在可能为变量赋空值的地方发现任何此类代码时发出警告。
自定义注解
Java允许程序员定义和实现自定义注解。定义自定义注解的语法如下:
@ation { }
这将创建一个名为的新注解类型。@关键字用于定义自定义注解。
在定义自定义注解时,必须为该注解定义两个强制属性。尽管这里还可以定义其他属性,但这两个属性最为重要,而且是必需的。这两个属性分别是 和 .。
这两个属性以自定义注解的形式声明。另外,可以在定义自定义注解时定义注解属性。如:
@ (.)
@ (.)
@ation {
name() “Mr Bean”;
();
上述自定义注解中,是,这意味着它在运行时对JVM可用,目标是,且可被注解为任何元素类型。
另外,它还有两个属性:一个是带有缺省值的,另一个是没有缺省值的。
注意,声明为方法的属性没有任何参数和抛出子句。此外,返回类型仅限于所述返回类型的字符串、类、枚举、注解和数组。
现在,可通过以下方式使用自定义注解: