考虑下面的简单代码示例:

public class TestStaticImport {
    static enum Branches {
        APPLE,
        IBM
    }
    public static void doSomething(Branches branch) {
        if (branch == APPLE) {
            System.out.println("Apple");
        }
    }
}

如果我们尝试编译此代码,则会收到错误消息:

java: cannot find symbol
  symbol:   variable APPLE
  location: class TestStaticImport

这可以通过引入此enum的静态导入来解决:
import static ... TestStaticImport.Branches.*
但是在这一刻(对我来说)开始令人费解:

此解决方案效果很好,所有内容都经过了很好的编译,直到TestStaticImport类将被移到空的根包中为止,即没有任何

此Java文件顶部的package blablabla;

代码行:import static TestStaticImport.Branches.*;在我的Intellij IDEA中被突出显示为有效代码(IDE的名称无关紧要,仅供引用),但是当我尝试编译此类代码时,出现以下错误:
java: package TestStaticImport does not exist
因此,实际上有两个问题:

1)主要问题:为什么不可能从空目录中添加import static

2)除了静态导入以外,还有什么方法(如果存在)允许仅使用字段名称(即APPLE而不是Branches.APPLE)对枚举字段进行代码引用?

P.S.请不要告诉我,空包装是丑陋的风格,依此类推。这个问题只是理论上的问题。

最佳答案

Java language specification禁止从未命名包中进行任何导入:

10-08 09:32