考虑下面的简单代码示例:
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禁止从未命名包中进行任何导入: