3.4Java语言之注解接口(Annotation Interface)

1.注解接口声明

注解接口是一种特殊的接口类型。为了与普通接口区分开来,关键字interface的前面应该有一个 @ 符号。

@interface 注解接口名 {
    类型 元素名1();
    类型 元素名2() default 默认值;
}
@interface RequestForEnhancementDefault {
    int id(); 
    String synopsis(); 
    String engineer() default "[unassigned]";
    String date() default "[unimplemented]";
}

2.注解的使用

@AnnotationName(元素名1=值1, 元素名2=值2,...)

2.1无元素注解

如果注解中没有元素或所有元素都使用默认值,则可以省略括号。

@Override
void mySuperMethod() { ... }

2.2有元素注解

有元素注解可以包含命名或未命名的元素。

//命名元素
@Author(name = "Benjamin Franklin", date = "3/27/2003")

//未命名元素
@SuppressWarnings(value =“ unchecked”)

//未命名元素的简写
@SuppressWarnings("unchecked")

2.3多个注解

也可以在同一声明上使用多个注解。

@Author(name = "Jane Doe")
@EBook
class MyClass { ... }

2.4多重注解

如果注解具有相同的类型,则称为多重注解。

@Author(name = "Jane Doe")
@Author(name = "John Smith")
class MyClass { ... }

3.常见注解

3.1用于编译的注解

3.1.1@Deprecated(全部场景)

@Deprecated注解指示已标记的元素已弃用,不应再使用。每当程序使用带有@Deprecated注解的方法,类或字段时,编译器都会生成警告。不推荐使用元素时,还应使用Javadoc@deprecated标记对其进行记录,如以下示例所示。

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

3.1.2@SuppressWarnings(除了包和注解场景)

@SuppressWarnings注解告诉编译器禁止生成特定警告。在以下示例中,使用了不赞成使用的方法,并且编译器通常会生成警告。但是,在这种情况下,@SuppressWarnings会导致警告被抑制。

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

3.1.3@override(只能方法场景)

@Override注解通知编译器该元素旨在覆盖超类中声明的元素。

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

3.1.4@Generated(全部场景)

@Generated注解的目的是供代码生成工具来使用,任何生成的源代码都可以被注解,从而与程序员提供的代码区分开来。

3.1.5@SafeVarargs(方法、构造器场景)

@SafeVarargs注解在应用于方法或构造函数时,断言该代码不会对其varargs参数执行潜在的不安全操作。

3.1.6@FuntionalInterface(接口场景)

@FuntionalInterface将接口标记为只有一个抽象方法的函数式接口。

3.2用于管理资源的注解

3.2.1@PostConstruct和@PreDestroy(方法场景)

@PostConstruct和@PreDestroy注解用于控制对象生命周期的环境中,例如Web容器和应用服务器。

3.2.2@Resource(类、接口、方法、域场景)

@Resource注解用于资源内注入。

3.3元注解

元注解就是适用于其他注解的注解,场景均为注解场景。

3.3.1@Target

@Target元注解可以应用于一个注解,以限制该注解可以应用到哪些项上。

3.3.2@Retention

@Retention元注解用于指定一条注解应该保留很长时间。

3.3.3@Documented

@Documented元注解为像Javadoc这样的归档工具提供了一些提示。

3.3.4@Inherited

@Inherited元注解只能应用于对类的注解。

3.3.5@Repeatable

@Repeatable注解表示可以将标记的注释多次应用于同一声明或类型使用。

3.3.6@Native

@Native 注解修饰成员变量,则表示这个变量可以被本地代码引用,常常被代码生成工具使用。对于 @Native 注解不常使用,了解即可。

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/back/java/2508.html

发表评论

登录后才能评论