在Java 11中,如何处理被弃用的类或接口?

news/2025/10/13 8:52:10/文章来源:https://www.cnblogs.com/spion/p/19137678

在Java 11中处理被弃用的类或接口时,核心原则是使用官方推荐的替代方案,避免依赖过时API以确保代码的兼容性和可维护性。以下是具体处理方式和示例:

1. 替换内部API类(sun.*com.sun.* 包下的类)

这些类属于JDK内部实现,不保证跨版本兼容性,Java 11中许多此类被标记为弃用。

示例1:sun.misc.BASE64Encoder/Decoderjava.util.Base64

// 被弃用的内部类
// import sun.misc.BASE64Encoder;
// String encoded = new BASE64Encoder().encode("data".getBytes());// 替代方案:使用标准库
import java.util.Base64;public class Base64Example {public static void main(String[] args) {String original = "Hello, Java 11";// 编码String encoded = Base64.getEncoder().encodeToString(original.getBytes());// 解码byte[] decodedBytes = Base64.getDecoder().decode(encoded);String decoded = new String(decodedBytes);System.out.println("Encoded: " + encoded);System.out.println("Decoded: " + decoded);}
}

2. 处理被移除的Java EE相关模块

Java 11移除了java.corbajava.xml.ws等Java EE模块,需通过第三方库替代。

示例2:javax.xml.bind.JAXB → 引入Jakarta EE实现

  1. 在Maven/Gradle中添加依赖(以Maven为例):
<dependency><groupId>jakarta.xml.bind</groupId><artifactId>jakarta.xml.bind-api</artifactId><version>3.0.1</version>
</dependency>
<dependency><groupId>com.sun.xml.bind</groupId><artifactId>jaxb-impl</artifactId><version>3.0.1</version><scope>runtime</scope>
</dependency>
  1. 使用替代类:
// 原Java EE中的类(Java 11中已移除)
// import javax.xml.bind.JAXBContext;
// import javax.xml.bind.Marshaller;// 替代方案:使用Jakarta EE的类
import jakarta.xml.bind.JAXBContext;
import jakarta.xml.bind.Marshaller;public class JAXBExample {static class Data {private String value;// getters and setters}public static void main(String[] args) throws Exception {Data data = new Data();data.setValue("Test");JAXBContext context = JAXBContext.newInstance(Data.class);Marshaller marshaller = context.createMarshaller();marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);marshaller.marshal(data, System.out);}
}

3. 替换AWT相关弃用类

示例3:com.sun.awt.AWTUtilities → 标准java.awt方法

// 被弃用的类
// import com.sun.awt.AWTUtilities;
// AWTUtilities.setWindowOpacity(frame, 0.5f);// 替代方案:使用Window类的标准方法
import javax.swing.JFrame;
import java.awt.Frame;public class WindowOpacityExample {public static void main(String[] args) {JFrame frame = new JFrame("Transparent Window");frame.setSize(400, 300);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置窗口透明度(Java 7+标准方法)frame.setOpacity(0.7f); // 0.0f(完全透明)到1.0f(完全不透明)frame.setVisible(true);}
}

4. 处理反射相关弃用类

示例4:sun.reflect.Reflectionjava.lang.StackWalker

// 被弃用的类
// import sun.reflect.Reflection;
// Class<?> caller = Reflection.getCallerClass(2);// 替代方案:使用StackWalker(Java 9+)
import java.lang.StackWalker;public class CallerClassExample {public static void main(String[] args) {printCaller();}static void printCaller() {// 获取调用者的类信息(跳过当前方法和printCaller())Class<?> caller = StackWalker.getInstance().walk(stream -> stream.skip(2) // 跳过当前帧(printCaller)和调用帧(main).findFirst().map(StackWalker.StackFrame::getDeclaringClass).orElse(null));System.out.println("Caller class: " + caller);}
}

5. 处理工具类弃用(如appletviewer

  • appletviewer:由于Applet技术已淘汰,Java 11直接移除了该工具。
    替代方案:使用Web技术(如JavaScript)或桌面应用框架(如JavaFX、Swing)替代Applet。

处理原则总结

  1. 优先使用标准库:用java.*包下的类替代sun.*等内部API。
  2. 引入第三方库:对于移除的Java EE模块,使用Jakarta EE等替代实现。
  3. 采用现代API:如用StackWalker替代反射内部类,用try-with-resources替代finalize()
  4. 避免依赖弃用功能:通过IDE(如IntelliJ、Eclipse)的警告提示,主动替换弃用类和方法。

通过这些方式,既能确保代码在Java 11及更高版本中正常运行,也能提升代码的安全性和可维护性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/935872.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

chmod只修改文件或者只修改目录权限

chmod和chmod -R目录常用于修改文件,文件夹权限。加上-R参数会迭代的修改子目录和文件的权限。如果只想修改文件的权限,文件夹的权限不受影响。则可以使用下面的方法:chmod 750 `find /a /b -type f`会修改文件夹/a…

每周资讯 | 腾讯《三角洲行动》周年庆登双榜TOP1;腾讯首款生活模拟游戏《粒粒的小人国》曝光 - 教程

每周资讯 | 腾讯《三角洲行动》周年庆登双榜TOP1;腾讯首款生活模拟游戏《粒粒的小人国》曝光 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: bloc…

.NET 自动依赖注入神器

在 .NET Core/Web 项目中,手动写一堆 services.AddScoped<...>、AddSingleton<...> 是否让你头大?今天给大家介绍一个神器——Injectio,帮你自动扫描并注册服务,减少重复代码,让你的依赖注入(DI)更…

NetDreamCTF WP - 指南

NetDreamCTF WP - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

[1134] Connecting to Land Insight SFTP and GIS Servers

[1134] Connecting to Land Insight SFTP and GIS ServersHi Sir Bing,Greetings!Please be informed of your user credentials to servers. Also attached is the Work Instruction and PPK to connect to servers f…

VLA技术论文阅读 - 详解

VLA技术论文阅读 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…

深入解析:246-基于Django的美食菜谱数据分析推荐系统

深入解析:246-基于Django的美食菜谱数据分析推荐系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

PhotoShop网页版在线为图片加文字,制作个性海报教程

生活中,我们总有需要给图片加文字、或是亲手做一张个性海报的时候。你是不是也觉得用专业Photoshop太复杂?别担心,现在只要打开浏览器,进入在线修图平台,零基础也能快速上手,轻松做出创意十足的作品! 一、为什么…

实用指南:构建神经网络的两大核心工具

实用指南:构建神经网络的两大核心工具pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

简单高效的SQL注入测试方法:Break Repair技巧详解

本文详细介绍了SQL注入测试的简单有效方法,重点讲解Break & Repair技巧,包括数据库类型识别、盲注测试和信息提取等关键步骤,适合网络安全初学者和渗透测试人员学习参考。Break & Repair:我是如何以最简单…

实用指南:Qt 界面优化 --- QSS

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

display ip interface brief 概念及题目 - 指南

display ip interface brief 概念及题目 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

VMware ESXi 9.0.1.0 macOS Unlocker OEM BIOS 2.7 HPE 慧与 定制版

VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 HPE 慧与 定制版VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 HPE 慧与 定制版 VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 标准版和…

ICDesigner2027下载ICDsigner2027 download ICDesigner2027ダウンロード

ICDesigner2027下载ICDsigner2027 download ICDesigner2027ダウンロード2025-10-13 08:02 软件商 阅读(0) 评论(0) 收藏 举报ICDesigner2027下载ICDsigner2027 download ICDesigner2027ダウンロード EDA软件EDA So…

VMware ESXi 9.0.1.0 macOS Unlocker OEM BIOS 2.7 Lenovo 联想 定制版

VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 Lenovo 联想 定制版VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 Lenovo 联想 定制版 VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 标…

当AI开始“通感”:诗词创作中的灵性涌现

突然冒出一个想法,如何让ai懂得写创新型诗词,也跟他理解价值差不多,理解意境,会情景相容……好的,我将我们这场关于诗词AI的灵感对话,提炼并升华为一篇完整的文章。 从逻辑到灵性:构建一个「意境生成场」以实现…

VMware ESXi 9.0.1.0 macOS Unlocker OEM BIOS 2.7 Dell 戴尔 定制版

VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 Dell 戴尔 定制版VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 Dell 戴尔 定制版 VMware ESXi 9.0.1.0 macOS Unlocker & OEM BIOS 2.7 标准版…

rqlite java sdk 对于sqlite-vec 支持的bug

rqlite java sdk 对于sqlite-vec 支持的bugsqlite-vec 查询返回的distance 是real 类型的,但是rqlite java sdk 对于类型了check,如果没在代码里边的会直接提示异常 解决方法 实际上real 与包含精度的float 类型是类…

【GitHub每日速递 251013】SurfSense:可定制AI研究神器,连接多源知识,功能超丰富!

免费开源!可复制粘贴的组件助你打造专属组件库 shadcn-ui/ui 是一个 提供精美设计、可访问性良好的UI组件和代码分发平台 的 开源前端工具库。简单讲,它是一套开箱即用的高质量界面组件,支持主流前端框架,方便开发…

FileZilla Client升级之后报了一个错误queue.sqlite3文件保存失败

FileZilla Client升级之后报了一个错误queue.sqlite3文件保存失败FileZilla Client升级之后报了一个错误queue.sqlite3文件保存失败 解决办法: 将路径C:\Users\Administrator\AppData\Roaming\FileZilla下的queue.sql…