我是 java 新手,目前使用 open-jdk 和 javac 21 以及 Eclipse IDE。
我正在尝试导入 om.sun.tools.javac.util.Pair 并收到错误 - “无法访问类型 com.sun.tools.javac.util.Pair”。
有人可以帮助如何安装此类模块/库吗?谷歌搜索了很多,但找不到任何具体内容。
当前使用的Openjdk版本 - openjdk版本“21”2023-09-19 OpenJDK 运行时环境(内部版本 21+35-2513) OpenJDK 64 位服务器虚拟机(内部版本 21+35-2513,混合模式,共享)
如评论...
请勿访问记录为仅供内部使用的类。
随着 Java 9 中Java 平台模块系统的到来,编译器可以强制执行此规则。
您可以轻松创建自己的“配对”课程。
record Pair ( String left , String right ) {}
record Pair ( int x , int y ) {}
com.sun.tools.javac.util.Pair
类位于jdk.compiler
模块的非导出包中。这不仅意味着不应依赖它的内部 API,而且它也是 JDK 特定的。该类的文档甚至声明不支持它:
/** A generic class for pairs. * * <p><b>This is NOT part of any supported API. * If you write code that depends on this, you do so at your own risk. * This code and its internal interfaces are subject to change or * deletion without notice.</b> */
您没有解释为什么您需要该类,也没有表明您的应用程序需要
jdk.compiler
模块,所以我假设您的IDE在您输入“Pair”时列出了它,并且您只是尝试了导入它或类似的东西。如果您只需要一个“Pair”类,那么您自己编写一个。使用records,这相对简单。
public record Pair<T, U>(T first, U second) {
// Not necessary, but included to be consistent with javac's Pair class
public static <T, U> Pair<T, U> of(T first, U second) {
return new Pair<>(first, second);
}
}
javafx.util.Pair
。可能还有其他实用程序库或框架提供类似的类。
如果出于某种原因你确实需要使用
com.sun.tools.javac.util.Pair
类,那么你需要通过:
--add-exports jdk.compiler/com.sun.tools.javac.util=<targets>
在编译时和运行时。将
<targets>
替换为要将包导出到的模块的逗号分隔列表。使用 ALL-UNNAMED
将包导出到未命名模块(即从类路径而不是模块路径加载的代码)。
搜索 IDE 的文档以了解如何根据需要指定
--add-exports
。