前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >@Deprecated 注解 (@Documented 、@Retention、@Target)

@Deprecated 注解 (@Documented 、@Retention、@Target)

作者头像
微风-- 轻许--
发布2022-04-13 16:34:05
7840
发布2022-04-13 16:34:05
举报
文章被收录于专栏:java 微风java 微风

在看 Unsafe 类源码时看到一个注解:@Deprecated,似曾相识...

@Deprecated

用在类或者方法上,表示对应代码不推荐使用、已经过时。

通常是因为它是危险的,或者是因为存在更好的替代方案。编译器在非弃用代码中使用或重写弃用的程序元素时发出警告。

调用时可能会出现删除线。

补充:

@Documented

有此注解的内容将由javadoc和类似工具记录。如果用文档对类型声明进行了注释,则其注释将成为注释元素的公共API的一部分。

@Retention

@Retention 是一个元注解,即注解上的注解。 它只有一个 RetentionPolicy 类型的属性,RetentionPolicy是一个枚举,共有3个值:SOURCE、CLASS、RUNTIME。

这 3 个值决定了被@Retention所注解的注解(即@Deprecated )被保留的方式。

1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃; 2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期; 3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在; 这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。 那怎么来选择合适的注解生命周期呢? 首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。 一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解 如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解; 如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。

以上 9 行出自:https://www.cnblogs.com/liufei1983/p/9987084.html

@Target

限制注解可以应用于哪种Java元素类型。只有一个枚举数组类型的属性:value。

用法如:

代码语言:javascript
复制
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
代码语言:javascript
复制
数组中的值为注解的作用目标。在此,即:CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE。
目标范围枚举值有:接口、类、枚举、注解、字段、枚举的常量、方法、方法参数、构造函数、局部变量、包等。
代码语言:javascript
复制
public enum ElementType {
    /** Class, interface (including annotation type), or enum declaration */
    TYPE,

    /** Field declaration (includes enum constants) */
    FIELD,

    /** Method declaration */
    METHOD,

    /** Formal parameter declaration */
    PARAMETER,

    /** Constructor declaration */
    CONSTRUCTOR,

    /** Local variable declaration */
    LOCAL_VARIABLE,

    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE
}

参考:

https://blog.csdn.net/fengcai0123/article/details/90544338

https://www.cnblogs.com/liufei1983/p/9987084.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @Deprecated
    • @Documented
      • @Retention
        • @Target
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档