如何修复 Java 中的 'cannot find symbol'
问题:
你想编译一些 Java 源代码(例如使用 Maven),但你收到类似这样的错误消息
java_compile_error.txt
[ERROR] /home/user/myproject/src/main/java/com/mydomain/myproject/Main.java:[123,40] cannot find symbol
[ERROR] symbol: class MyClass解决方案
Java 不知道在哪里找到 MyClass。
首先,检查你是否正确导入了 MyClass。
如果 MyClass 可以在你的库中找到,你很可能在错误发生的文件顶部缺少导入语句。
另一方面,如果 MyClass 是从外部库导入的,检查:
- 你是否使用了正确版本的库。可能你正在使用
MyClass不存在的旧版本库。这通常发生在 maven 中使用 SNAPSHOT 版本时,因为不同的开发者可能有不同的 SNAPSHOT,所以一个人可能有构建问题而另一个人可能没有。 - 你是否使用了正确的导入语句(参考文档或库的源代码检查你是否使用了正确的包。
如果你不知道在哪个库中可以找到某个符号,请参见我们的文章[待完成]。
‘符号’到底是什么?
符号的概念和术语在许多不同的编程语言中使用。 基本上它意味着*‘一个名称,引用在其他地方更详细声明的某些内容’。*
因此,如果你遇到类似*‘cannot find symbol’的错误消息,编译器试图告诉你:“我不知道那个名称引用什么”*。
示例:
当你在 Java 中声明一个类时,例如
MyClass.java
class MyClass {
/* 你的代码放在这里! */
}你以后可以通过其名称 MyClass 引用该类,例如在
UseMyClass.java
MyClass class = new MyClass();在该行代码中,MyClass 被符号化使用以引用我们之前列出的完整类声明(class MyClass { /* ... */})。
因此,MyClass 被用作符号来引用你之前(完整)的 MyClass 声明。
但是,如果名称 MyClass 没有关联的完整声明,编译器会告诉你 ‘cannot find symbol’。
Check out similar posts by category:
Java
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow