包 com.sun.beans.finder 不存在 openjdk

package com.sun.beans.finder does not exist openjdk

编译导入com.sun.beans.finder.ConstructorFinder的文件时,出现这个错误:

./src/Demo/FeatConstruction.java:14: error: package com.sun.beans.finder does not exist

系统是 Ubuntu 18.04.1 与 OpenJDK:

openjdk version "1.8.0_322"
OpenJDK Runtime Environment (build 1.8.0_322-b06)

我在哪里可以找到这个包?

编译过程如下:

对于./src/Demo/FeatConstruction.java,我编译它使用:

javac -cp "./src:./lib" -d bin ./src/Demo/FeatConstruction.java

我在这里找到了这些 classes 的踪迹: https://www.programcreek.com/java-api-examples/docs/?api=com.sun.beans.finder.ClassFinder

从包名我得出结论,它们来自 Sun 拥有 Java 东西的时代,因此最多只能在 Oracle JDK 中找到 - 但不是标准 classes.

要查找 classes,您可能需要切换到标准化的 API。 对于任何对象(或派生的 class 实例),运行

Class objectClass = Class.forName("java.lang.Object");

有了它,您还可以按名称找到 classes 并获取 class 引用 - 它可用于所有 Java 实现。

首先,您不应该尝试在您的代码中使用此 class。它是一个内部 class。 com.sun.* 中的所有 class 理论上都是内部的,不应直接在您的代码中使用。

class 存在于 OpenJDK 代码库中(Java 8、11 甚至 17),并且存在于 Open[=51] 中的 rt.jar =] Java 8 安装在我的 Ubuntu 盒子上。

可是即便如此,我的Java8javac还是说包不存在。所以我怀疑 javac 本身就是 black-listing 包。

可能有解决方法1,但我的建议是不要这样做。寻找另一种方法来实现功能,而不是依赖于一些未记录的内部 class。例如,寻找写得好的2 3rd 方库。

如果您确实找到了使您的代码在 Java 8 上编译和 运行 的方法,请注意它可能会在以后的版本中停止工作。 1) class 可能会被重命名或删除,恕不另行通知。 2) 在以后的版本中,他们越来越难以在代码中直接使用 JDK 内部 classes。

如果你坚持这种坏习惯,你就会给自己带来未来的问题......维护您的代码。


1 - ...但我怀疑切换到 Oracle Java 8 发行版是否会有帮助。
2 - 一个不会在幕后做这种坏事的图书馆。