【发布时间】:2021-06-25 23:48:16
【问题描述】:
因此,在依赖于它的类中静态导入枚举时,我遇到了找不到符号错误。它们都位于同一目录中的不同文件中。我省略了一个明确的包名。
TokenType.java
// No imports
enum TokenType {
ADD, MINUS, MULTIPLY, DIVIDE,
...
}
Scanner.java
import java.util.ArrayList;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import static TokenType.*; // <--- (error: cannot find symbol)
class Scanner {
private static final Map <String, TokenType> keywords; // <--- (no error; javac can resolve the class name just fine)
static {
keywords = new HashMap<>();
keywords.put("+", ADD); // <-- (error: cannot find symbol, which makes sense)
keywords.put("-", MINUS);
...
}
...
}
我只是不确定如何继续。名称都输入正确,并且只有一个 TokenType 类,因此不存在类冲突。我在项目目录中的其他类没有嵌套类,不要从其他类扩展/实现,或者导入在其依赖项中具有 TokenType 类的库。在每次编译之前,我已经清理了所有过时类的目录,甚至更改了调用 javac 的顺序。任何帮助都会很棒,谢谢。
编辑:解决方案是将它们放在一个命名的包中。 Java 不允许从默认包导入。
【问题讨论】:
-
“我省略了明确的包名”。您应该用其他类似的东西替换它,而不仅仅是省略它。在这里省略这样的问题并没有帮助。