从Java 8迁移到Java11。在运行时,是否可以从Java 8中编译的库中的类文件访问JDK内部API?

问题描述 投票:0回答:1

我知道,我的项目代码对JDK内部API的任何访问都将在编译时由Java编译器标记。但是,用Java 8编译的第三方库JAR呢?

我的理解是,由于它们是在JDK 8或更早的版本上编译的,因此它们最终将在类路径中。这些类中的代码可以在运行时访问JDK内部API。正确吗?

这是来自JDK 9发行说明:JDK 9 Release Notes

所有JDK内部类也在运行时进行封装,但是大多数类类路径上的应用程序和库仍然可以访问它们。具体来说,JDK 8中存在的JDK内部软件包中的所有公共类都可以通过类路径上的代码访问。

因此,如果我的项目依赖于访问JDK Internals的库X(在JDK 8中编译),我应该很好吗?

java java-9 java-11 java-module
1个回答
0
投票

没有如果您依赖于已从JDK中删除的内容(甚至间接地),则在JDK 8上编译良好的代码将无法在JDK 11上的运行时运行。]

[您依赖一些您希望代码在运行时在类路径上可用的类。如果未达到该期望,它将无法正常工作。项目已被故意从JDK中删除;它们不仅在编译器中隐藏,而且实际上已经消失了。

如果您可以具体说明所依赖的内部结构,我们可以为您提供更多详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.