You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenJDK 21+Eclipse中无法导入com.sun.tools.javac.util.Pair求助

解决com.sun.tools.javac.util.Pair无法访问的问题

问题原因

com.sun.tools.javac.util.Pair是JDK的内部API,不属于公开标准API。从Java 9引入模块化系统后,JDK默认禁止直接访问这类内部类,所以你会收到"The type com.sun.tools.javac.util.Pair is not accessible"的错误。

推荐解决方案:使用标准库替代类

不建议依赖内部API(后续JDK版本可能移除或修改),优先选择Java标准库中的键值对实现:

  • Java 8+:使用java.util.AbstractMap.SimpleEntry,支持可变的键值对:
    import java.util.AbstractMap;
    import java.util.Map;
    
    public class Test {
        public static void main(String[] args) {
            Map.Entry<String, Integer> pair = new AbstractMap.SimpleEntry<>("key", 123);
            System.out.println(pair.getKey() + ": " + pair.getValue());
        }
    }
    
  • Java 16+:使用java.util.Map.Entry.of()创建不可变键值对,更简洁:
    import java.util.Map;
    
    public class Test {
        public static void main(String[] args) {
            Map.Entry<String, Integer> pair = Map.Entry.of("key", 123);
            System.out.println(pair.getKey() + ": " + pair.getValue());
        }
    }
    

非要使用内部API的临时解决办法(不推荐)

如果因为特殊需求必须用com.sun.tools.javac.util.Pair,需要在Eclipse和编译参数中配置访问权限:

  1. Eclipse项目配置:
    • 右键项目 → 「Properties」→ 「Java Build Path」→ 「Libraries」
    • 展开你的OpenJDK 21 → 选择「Access rules」→ 点击「Edit」
    • 添加规则:Resolution选「Accessible」,Pattern填com/sun/tools/javac/util/**,点击「OK」保存
  2. 编译参数配置:
    • 在Eclipse中,右键项目 → 「Properties」→ 「Java Compiler」→ 找到「Command line arguments」
    • 添加编译参数:--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED

内容的提问来源于stack exchange,提问作者Suga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 12:57:05