Java注解使用

阅读:238

目录介绍

  • 01.内建注解使用
  • 02.元Annotation使用

01.内建注解使用

  • Java提供了多种内建的注解,下面接下几个比较常用的注解:@Override、@Deprecated、@SuppressWarnings以及@FunctionalInterface这4个注解。
    • 内建注解主要实现了元数据的第二个作用:编译检查。
  • @Override
    • 用途:用于告知编译器,我们需要覆写超类的当前方法。如果某个方法带有该注解但并没有覆写超类相应的方法,则编译器会生成一条错误信息。如果父类没有这个要覆写的方法,则编译器也会生成一条错误信息。
    • @Override可适用元素为方法,仅仅保留在java源文件中。
  • @Deprecated
    • 用途:使用这个注解,用于告知编译器,某一程序元素(比如方法,成员变量)不建议使用了(即过时了)。
    • 例如:Person类中的info()方法使用@Deprecated表示该方法过时了。
    public class Person {
        @Deprecated
        public void info(){
    
        }
    }
    

    • 调用info()方法会编译器会出现警告,告知该方法已过时。
  • @SuppressWarnings
    • 用途:用于告知编译器忽略特定的警告信息,例在泛型中使用原生数据类型,编译器会发出警告,当使用该注解后,则不会发出警告。
    • 注解类型分析: @SuppressWarnings可适合用于除注解类型声明和包名之外的所有元素,仅仅保留在java源文件中。
    • 该注解有方法value(),可支持多个字符串参数,用户指定忽略哪种警告,例如:
    @SupressWarning(value={"uncheck","deprecation"})
    

  • @FunctionalInterface
    • 用途:用户告知编译器,检查这个接口,保证该接口是函数式接口,即只能包含一个抽象方法,否则就会编译出错。
    • 注解类型分析: @FunctionalInterface可适合用于注解类型声明,保留时长为运行时。

02.元Annotation使用

  • JDK除了在java.lang提供了上述内建注解外,还在java.lang。annotation包下提供了6个Meta Annotation(元Annotataion),其中有5个元Annotation都用于修饰其他的Annotation定义。其中@Repeatable专门用户定义Java 8 新增的可重复注解。
  • 先介绍其中4个常用的修饰其他Annotation的元Annotation。在此之前,我们先了解如何自定义Annotation。
  • 当一个接口直接继承java.lang.annotation.Annotation接口时,仍是接口,而并非注解。要想自定义注解类型,只能通过@interface关键字的方式,其实通过该方式会隐含地继承.Annotation接口。
  • @Documented
    • @Documented用户指定被该元Annotation修饰的Annotation类将会被javadoc工具提取成文档,如果定义Annotation类时使用了@Documented修饰,则所有使用该Annotation修饰的程序元素的API文档中将会包含该Annotation说明。例如:
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
    public @interface Deprecated {
    }
    

    • 定义@Deprecated时使用了@Documented,则任何元素使用@Deprecated修饰时,在生成API文档时,将会包含@Deprecated的说明
    • 以下是String的一个过时的构造方法:该注解实现了元数据的第一个功能:编写文档。
    @Deprecated
    public String(byte[] ascii,int hibyte,int offset, int count)

  • @Inherited
    • @Inherited指定被它修饰的Annotation将具有继承性——如果某个类使用了@Xxx注解(定义该Annotation时使用了@Inherited修饰)修饰,则其子类将自动被@Xxx修饰。
  • @Retention
    • @Retention:表示该注解类型的注解保留的时长。当注解类型声明中没有@Retention元注解,则默认保留策略为RetentionPolicy.CLASS。关于保留策略(RetentionPolicy)是枚举类型,共定义3种保留策略,如下表: - 
  • 1.png@Target
    • @Target:表示该注解类型的所适用的程序元素类型。当注解类型声明中没有@Target元注解,则默认为可适用所有的程序元素。如果存在指定的@Target元注解,则编译器强制实施相应的使用限制。关于程序元素(ElementType)是枚举类型,共定义8种程序元素,如下表:

1.png


赞赏支持


精彩留言

发表评论