首页 > 解决方案 > 为什么我不必要求 java.base?

问题描述

当我尝试 importjavax.swing.JFrame时,eclipse 会抱怨,因为我需要明确告诉我的包我将从java.desktop模块中导入东西。所以我把requires java.desktop我的module-info.java,然后java编译器知道链接这些java.desktop东西。我的也可以requires java.basemodule-info.java不过好像没必要。我可以import java.util.Arrays没有它。

日食是否javac在幕后为我的选择添加了一些魔法酱?是否javac自动需要java.base?为什么我不需要 require java.base?如果这是编译器魔法,是否还有其他此类特权模块会自动链接到我的包中?

使用 jdk-14,但不确定这是否相关。

标签: javaeclipse

解决方案


这是在JLS 7.7.1中指定的:

7.7.1. 依赖
requires 指令指定当前模块所依赖的模块的名称。
requires 指令不得出现在 java.base 模块的声明中,否则会发生编译时错误,因为它是原始模块并且没有依赖项(第 8.1.4 节)。
如果模块的声明不表达对 java.base 模块的依赖,并且模块本身不是 java.base,那么该模块对 java.base 模块具有隐式声明的依赖。

这类似于如何将java.lang包中的类隐式导入到源文件中。模块不需要显式声明它们依赖于java.base模块。


推荐阅读