zoukankan      html  css  js  c++  java
  • 注解

    转:https://juejin.im/post/5b45bd715188251b3a1db54f

    注解的参数:参数类型+参数名+()

    常用的Java注解如下:

    1、@Deprecated – 所标注内容不再被建议使用;

    2、@Override – 只能标注方法,表示该方法覆盖父类中的方法;

    3、@Documented --所标注内容可以出现在javadoc中;

    4、@Inherited – 只能被用来标注“Annotation类型”,它所标注的Annotation具有继承性;

    5、@Retention – 只能被用来标注“Annotation类型”,而且它被用来指定Annotation的RetentionPolicy属性;**

    6、@Target – 只能被用来标注“Annotation类型”,而且它被用来指定Annotation的ElementType属性;**

    7、@SuppressWarnings – 所标注内容产生的警告,编译器会对这些警告保持静默;

    8、@interface – 用于定义一个注解;

    其中,4、5、6、8多用于自定义注解,读者着重记一下。

    内置注解

    @Override:在java.lang.Override中,此注释只适用于修辞方法,表示一个方法声明打算重写超类中的另一个声明

    @Deprecated:在java.lang.Override中,@Deprecated 表示这个方法已经过期,不建议开发者使用。(暗示在将来某个不确定的版本,就有可能会取消掉)

    @SuppressWarnings:在java.lang.Override中,@SuppressWarnings Suppress英文的意思是抑制的意思,就是镇压警告,这个注解的用处是忽略警告信息。

    自定义注解

    注解的本质

    「java.lang.annotation.Annotation」接口中有这么一句话,用来描述『注解』。

    The common interface extended by all annotation types

    所有的注解类型都继承自这个普通的接口(Annotation)

    这句话有点抽象,但却说出了注解的本质。我们看一个 JDK 内置注解的定义:

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Override {

    }
    复制代码

    这是注解 @Override 的定义,其实它本质上就是:

    public interface Override extends Annotation{
       
    }

     

    元注解

    『元注解』是用于修饰注解的注解,通常用在注解的定义上,例如:

    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.SOURCE)
    public @interface Override {

    }

    这是我们 @Override 注解的定义,你可以看到其中的 @Target,@Retention 两个注解就是我们所谓的『元注解』,『元注解』一般用于指定某个注解生命周期以及作用目标等信息。

    JAVA 中有以下几个『元注解』:

    • @Target:注解的作用目标

    • @Retention:注解的生命周期

    • @Documented:注解是否应当被包含在 JavaDoc 文档中

    • @Inherited:是否允许子类继承该注解

    其中,@Target 用于指明被修饰的注解最终可以作用的目标是谁,也就是指明,你的注解到底是用来修饰方法的?修饰类的?还是用来修饰字段属性的。

    @Target 的定义如下:

     

    img

    我们可以通过以下的方式来为这个 value 传值:

    @Target(value = {ElementType.FIELD})

    被这个 @Target 注解修饰的注解将只能作用在成员字段上,不能用于修饰方法或者类。其中,ElementType 是一个枚举类型,有以下一些值:

    • ElementType.TYPE:允许被修饰的注解作用在类、接口和枚举上

    • ElementType.FIELD:允许作用在属性字段上

    • ElementType.METHOD:允许作用在方法上

    • ElementType.PARAMETER:允许作用在方法参数上

    • ElementType.CONSTRUCTOR:允许作用在构造器上

    • ElementType.LOCAL_VARIABLE:允许作用在本地局部变量上

    • ElementType.ANNOTATION_TYPE:允许作用在注解上

    • ElementType.PACKAGE:允许作用在包上

    @Retention 用于指明当前注解的生命周期,它的基本定义如下:

     

    img

    同样的,它也有一个 value 属性:

    @Retention(value = RetentionPolicy.RUNTIME

    这里的 RetentionPolicy 依然是一个枚举类型,它有以下几个枚举值可取:

    • RetentionPolicy.SOURCE:当前注解编译期可见,不会写入 class 文件

    • RetentionPolicy.CLASS:类加载阶段丢弃,会写入 class 文件

    • RetentionPolicy.RUNTIME:永久保存,可以反射获取

    @Retention 注解指定了被修饰的注解的生命周期,一种是只能在编译期可见,编译后会被丢弃,一种会被编译器编译进 class 文件中,无论是类或是方法,乃至字段,他们都是有属性表的,而 JAVA 虚拟机也定义了几种注解属性表用于存储注解信息,但是这种可见性不能带到方法区,类加载时会予以丢弃,最后一种则是永久存在的可见性。

    剩下两种类型的注解我们日常用的不多,也比较简单,这里不再详细的进行介绍了,你只需要知道他们各自的作用即可。@Documented 注解修饰的注解,当我们执行 JavaDoc 文档打包时会被保存进 doc 文档,反之将在打包时丢弃。@Inherited 注解修饰的注解是具有可继承性的,也就说我们的注解修饰了一个类,而该类的子类将自动继承父类的该注解。

     

  • 相关阅读:
    php数组到json的转变
    微信小程序获取微信绑定的手机号
    微信小程序授权登录
    用海豚框架(DolphinPHP)实现单/多图片上传时,如何获得图片路径
    数据库索引-简单了解
    php将二维数组转换成我想要的一维数组
    php的八大数据类型
    单例模式
    Springboot配置Sqlserver
    WinForm 文件操作
  • 原文地址:https://www.cnblogs.com/huangui/p/12907048.html
Copyright © 2011-2022 走看看