当前位置: 首页 > news >正文

Java 21的Enhanced Deprecation的笔记

  • Java Core Libraries

  • Enhanced Deprecation
    废弃API,一般可以理解为不推荐开发者在项目中使用的API,当前为了保持兼容,在JDK中保留,未来可能会删除。
    作为开发者,使用工具jdeprscan可以方便的查找现有代码中存在的一些废弃API的信息。

  • Deprecation in the JDK
    废弃API出现的部分原因:

    • 一些比较危险的API,比如Thread.stop
    • 变更API的设计,提供新的API,导致已有的API被废弃。
    • 新的API,提供更好的使用体验,导致已有的API被废弃。
    • 即将被移除的API。

    当前被废弃的API,可参考清单。

  • How to Deprecate APIs
    在类或者方法上增加注解@Deprecated,比如:

    • 标记版本号

      @Deprecated(since="<version>")
      

      <version>为版本号的说明,比如1.2,表示从1.2版本开始,相关API废弃,不再推荐开发者使用。

    • 标记未来的删除可能性

      @Deprecated(forRemoval=<boolean>)
      

      forRemovalboolean类型,取值包括truefalse。取值为true,提示开发者相关API后续可能会被删除。

    • 混合使用

      @Deprecated(since="9", forRemoval=true)
      

    在API的文档中增加标记@deprecated,提供更丰富的说明。
    在现代的IDE中,@Deprecated@deprecated需要成对使用。

  • Notifications and Warnings

    编译Java代码时,增加选项-Xlint:deprecation-Xlint:removal,可以获得废弃API的相应提示信息。
    编译命令的样例,如下:

    javac -Xlint:deprecation -Xlint:removal src/example/DeprecationExample.java
    

    出于兼容的原因,消除废弃API的使用,需要一个过程,因此为了避免恼人的警告影响心情,对于一些确认无伤大雅的废弃API,可以在项目代码中增加注解,即使用如下方式屏蔽相应的编译警告。

    • 使用@SuppressWarnings("deprecation"),屏蔽废弃API的编译警告。
    • 使用@SuppressWarnings("removal"),屏蔽废弃API可能被移除的编译警告。
    • 使用@SuppressWarnings({"deprecation","removal"}),同时屏蔽废弃API和可能被移除的编译警告。
  • Running jdeprscan
    jdeprscan的使用方法,可参考文档。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Android生成Java AIDL
  • URL.createObjectURL 与 FileReader:Web 文件处理两大法宝的对比
  • AI客服机器人开启企业客户服务新纪元
  • 『功能项目』眩晕图标显示【52】
  • 『功能项目』怪物的有限状态机【42】
  • 语言的枚举
  • Python编程 - 异常处理与文件读写
  • Rust编写Windows服务
  • Python精选200Tips:121-125
  • Unity-Transform-坐标转换
  • Prometheus+grafana+kafka_exporter监控kafka运行情况
  • Python酷库之旅-第三方库Pandas(117)
  • 人工智能在现代科技中的应用和未来发展趋势
  • 微信小程序中巧妙使用 wx:if 和 catchtouchmove 实现弹窗禁止页面滑动功能
  • git命令行基础常用指令
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 230. Kth Smallest Element in a BST
  • Akka系列(七):Actor持久化之Akka persistence
  • Android单元测试 - 几个重要问题
  • Babel配置的不完全指南
  • create-react-app做的留言板
  • GitUp, 你不可错过的秀外慧中的git工具
  • PHP那些事儿
  • ReactNativeweexDeviceOne对比
  • React的组件模式
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 百度小程序遇到的问题
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 聊聊sentinel的DegradeSlot
  • 漂亮刷新控件-iOS
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 微信开源mars源码分析1—上层samples分析
  • 源码安装memcached和php memcache扩展
  • 怎么把视频里的音乐提取出来
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • puppet连载22:define用法
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • #前后端分离# 头条发布系统
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (八)Spring源码解析:Spring MVC
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (二)斐波那契Fabonacci函数
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (六)DockerCompose安装与配置
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (七)Flink Watermark
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (四)库存超卖案例实战——优化redis分布式锁
  • .dwp和.webpart的区别
  • .net 7和core版 SignalR
  • .NET Core 发展历程和版本迭代
  • .NET 应用启用与禁用自动生成绑定重定向 (bindingRedirect),解决不同版本 dll 的依赖问题