导入枚举时找不到符号错误 class
Cannot find symbol error when importing enum class
因此,在依赖它的 class 中静态导入枚举时,我遇到了找不到符号错误。它们都位于同一目录中的不同文件中。我省略了一个明确的包名称。
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 class,因此不存在 class 冲突。我在项目目录中的其他 classes 没有嵌套 classes,不要从其他 classes extend/implement,或导入具有 TokenType class 的库在他们的依赖中。在每次编译之前,我已经清除了目录中所有陈旧的 classes,甚至更改了我调用 javac 的顺序。任何帮助都会很棒,谢谢。
编辑:解决方案是将它们放在一个命名包中。 Java 不允许从默认包导入。
从编译器可以解析 Map <String, TokenType>
中的简单名称 TokenType
的事实来看,似乎 TokenType
是在与 Scanner
相同的包中声明的。
你还说你“省略了一个明确的包名”,这意味着这两个 类 都没有在默认包()中声明,但是一些包有一个名字.假设他们都在
package com.example.foo;
然后你需要做:
import static com.example.foo.TokenType.*;
请注意,即使您所在的位置可以使用其简单名称访问该类型,您仍然需要使用其 canonical name (basically with the package name fully written out) in a static import declaration., and the name has to be qualified(以 X.Y
的形式),这就是为什么类 在默认包中不起作用。
因此,在依赖它的 class 中静态导入枚举时,我遇到了找不到符号错误。它们都位于同一目录中的不同文件中。我省略了一个明确的包名称。
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 class,因此不存在 class 冲突。我在项目目录中的其他 classes 没有嵌套 classes,不要从其他 classes extend/implement,或导入具有 TokenType class 的库在他们的依赖中。在每次编译之前,我已经清除了目录中所有陈旧的 classes,甚至更改了我调用 javac 的顺序。任何帮助都会很棒,谢谢。
编辑:解决方案是将它们放在一个命名包中。 Java 不允许从默认包导入。
从编译器可以解析 Map <String, TokenType>
中的简单名称 TokenType
的事实来看,似乎 TokenType
是在与 Scanner
相同的包中声明的。
你还说你“省略了一个明确的包名”,这意味着这两个 类 都没有在默认包(
package com.example.foo;
然后你需要做:
import static com.example.foo.TokenType.*;
请注意,即使您所在的位置可以使用其简单名称访问该类型,您仍然需要使用其 canonical name (basically with the package name fully written out) in a static import declaration., and the name has to be qualified(以 X.Y
的形式),这就是为什么类 在默认包中不起作用。