在本部分的快速指南中,我们将会查看 Java 的 deprecated API 和如何在程序中使用 @Deprecated 注解。

@Deprecated Annotation(注解)

作为程序的进化和迭代,随着时间的推移,在项目中总会有些类,构造方法,字段,类型或者方法不建议人们继续继续使用。

为了避免程序向后兼容的问题,而导致程序或者 API 不能使用,我们将会对不再使用的元素使用 @Deprecate 注解来声明。

@Deprecated 主要目的是告诉其他的开发者标记的元素不要在程序中继续使用了

同时我们还建议在 @Deprecated 注解后面添加一些说明的文本来解释如果希望程序或者 API 具有相同的功能应该使用何种其他的方法。

SRC

https://github.com/cwiki-us-demo/java-tutorials/blob/master/core-java-modules/core-java-annotations/src/main/java/com/ossez/annotations/ClassWithDeprecatedMethod.java

  1. package com.ossez.annotations;
  2. public class ClassWithDeprecatedMethod {
  3. /**
  4. * Calculate period between versions
  5. * * @deprecated
  6. * * This method is no longer acceptable to compute time between versions.
  7. * * <p> Use {@link ClassWithDeprecatedMethod#updatedMethod()} instead.
  8. */
  9. @Deprecated
  10. public static void deprecatedMethod() {
  11. }
  12. /**
  13. * Updated Method instead of deprecatedMethod.
  14. */
  15. public static void updatedMethod() {
  16. }
  17. }

请注意,如果一个 Java  的元素被声明了,但是又在程序或者项目的其他地方被引用的话,编译器将会显示丢弃(deprecated)API 的警告。

在上面的示例代码中,如果 deprecatedMethod 被调用了,只有调用 deprecatedMethod 这个方法显示丢弃的警告。

同时请注意,通过使用 Javadoc @deprecate 标记,我们将会在 Java 文档中也被标记丢弃。

上面的代码,如果在 IDE 中查看文本,将会显示为如下:

Java 9 添加的可选属性

针对 Java 9 的 @Deprecated 注解,还添加了 since 和 forRemoval 属性。

since – 接受字符串的输入参数,用于定义我们丢弃的内容从哪个版本开始。默认为空字符串。

forRemoval  – 使用布尔(boolean)类型,用于标记我们丢弃的内容是不是从下一个发行的版本就会被删除。默认为 false。

如下面的代码中对上面属性的定义。需要注意的是,这个功能最低的版本为 Java 9,如果你还在使用 Java 8 的话,是不能被支持的,将会出现编译错误。

  1. /**
  2. * Calculate period between versions
  3. * * @deprecated
  4. * * This method is no longer acceptable to compute time between versions.
  5. * * <p> Use {@link ClassWithDeprecatedMethod#updatedMethod()} instead.
  6. */
  7. @Deprecated(since = "4.5", forRemoval = true)
  8. public static void deprecatedMethod() {
  9. }

上面的内容表示的是 deprecatedMethod 方法是从版本 4.5 开始准备丢弃的,同时已经计划在下一个主要的发行版本中完全丢弃删除。

通过添加上面的内容,如果我们现在还在尝试使用这个方法的话,将会通知编译器给我们一个非常强烈的警告

同时,当前的主流 IDE 工具也能够明显的显示上面强提示。例如在 IntelliJ 中,删除线将会使用一个红色的删除线来替代当前使用的黑色删除线。

结论

在这个快速文章中,我们看到了如何使用 @Deprecated 声明来标记不再使用的元素,以及针对 Java 9 我们可以为其设置一些其他的属性以及这些属性的默认值。

完整的代码,请参考  GitHub中的项目,可能项目中的源代码和文章中使用的代码有所不同,请以 GitHub 中的代码为主。

代码和内容的完整链接为:https://www.cwiki.us/display/JAVAZH/Java+@Deprecated+Annotation

Java @Deprecated Annotation(注解)的更多相关文章

  1. 对Java的annotation(注解)的认识

    什么是java的annotation(注解) ? 注解的定义(annootation): public @interface TestAnnotation { } 上面的这种形式,便定义了注解是如何定 ...

  2. java EE中的hello1.java及Annotation(注解)

    一.Annotation(注解) 注解(Annotation)很重要,未来的开发模式都需要注解,注解是java.lang.annotation包,Annotation是从java5引入的,它提供一些不 ...

  3. Java之Annotation(注解)——注解处理器

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

  4. API 注解 & Java API annotation

    API 注解 & Java API annotation 注解 annotation

  5. Java学习之注解Annotation实现原理

    前言: 最近学习了EventBus.BufferKinfe.GreenDao.Retrofit 等优秀开源框架,它们新版本无一另外的都使用到了注解的方式,我们使用在使用的时候也尝到不少好处,基于这种想 ...

  6. java中的注解(Annotation)

    转载:https://segmentfault.com/a/1190000007623013 简介 注解,java中提供了一种原程序中的元素关联任何信息.任何元素的途径的途径和方法. 注解是那些插入到 ...

  7. Java基础笔记 – Annotation注解的介绍和使用 自定义注解

    Java基础笔记 – Annotation注解的介绍和使用 自定义注解 本文由arthinking发表于5年前 | Java基础 | 评论数 7 |  被围观 25,969 views+ 1.Anno ...

  8. paip.Java Annotation注解的作用and 使用

    paip.Java Annotation注解的作用and 使用 作者Attilax 艾龙,  EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog. ...

  9. java基础篇---注解(Annotation)

    一.概念 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关 ...

随机推荐

  1. C++模板编程与宏编程经验谈

    C++模板编程与宏编程经验谈 有人说C 与C++的不同主要是因为C++支持模板,不要说区别是面向对象化编程,因为C同样能很好的实现对象化编程,面向对象化其实只是思想,在很多语言中都能实现,区别在于实现 ...

  2. spring boot部署中executable的系统服务

    首先在pom.xml 中添加spring boot插件,并设置 <plugins> <plugin> <groupId>org.springframework.bo ...

  3. .net core webapi搭建(2)跨域

    Core WebAPI中的跨域处理 在使用WebAPI项目的时候基本上都会用到跨域处理 Core WebAPI的项目中自带了跨域Cors的处理,不需要单独添加程序包 如图所示 修改 Configure ...

  4. python练习题-9-6

    本代码是<Python核心编程(第二版)>第九章的9-6练习题,完成的功能为:文件比较:比较两个文本文件是否相同,如果不同,给出第一个不同处的行号和列号. #!/usr/bin/env p ...

  5. MYGUI3.2改造——与HGE结合,实现资源打包

    其实这个有点标题党的意思.MYGUI本身有资源打包的接口,可以实现从内存读取文件. 而HGE也提供了资源打包的功能(不过HGE的资源文件管理比较弱).把MYGUI的接口接到HGE上就可以实现MYGUI ...

  6. CentOS7 zabbix4.0搭建配置

    一.Zabbix-Server服务器端的安装 概述:10050是Agent的端口,Agent采用被动方式,Server主动连接Agent的10050端口:10051是Server的端口,Agent采用 ...

  7. Python3之MySQL操作

    1.安装pymysql PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,在使用之前需要进行安装,可以使用以下命令安装最新版的 PyMySQL: 1).在cmd命令 ...

  8. Django orm常用字段和字段参数

    1.Object Relational Mapping(ORM) 1.1ORM介绍 ORM概念 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象 ...

  9. 内网IP的解释

    https://baike.baidu.com/item/%E5%86%85%E7%BD%91ip/8881186?fr=aladdin

  10. Arduino通信篇系列之print()和write()输出方式的差异

    我们都知道,在HardwareSerial类中有print()和write()两种输出方式, 两个都可以输出数据,但其输出方式并不相同. 例子: float FLOAT=1.23456; int IN ...