无法导入 com.sun.tools.javac.util.Pair

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

我是 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 javac java-21
2个回答
0
投票

如评论...

请勿访问记录为仅供内部使用的类。

随着 Java 9 中Java 平台模块系统的到来,编译器可以强制执行此规则。

您可以轻松创建自己的“配对”课程。

record Pair ( String left , String right ) {}
record Pair ( int x , int y ) {}

0
投票

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,请使用

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

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