请解释以下有关“找不到symbol”、“无法解析symbol”或"Symbol not found“错误( Java):
这个问题旨在为Java中这些常见的编译错误提供一个全面的问答。
发布于 2015-04-17 16:50:13
如果你忘记了一个new
,你也会得到这个错误
String s = String();
对比
String s = new String();
因为不带new
关键字的调用将尝试查找不带参数、名为String
的(本地)方法,而该方法签名很可能没有定义。
发布于 2015-12-06 17:19:56
'Variable is out of scope'的另一个示例
因为我已经看过几次这样的问题了,也许再举一个例子来说明什么是非法的,即使它可能感觉还可以。
考虑下面的代码:
if(somethingIsTrue()) {
String message = "Everything is fine";
} else {
String message = "We have an error";
}
System.out.println(message);
这是无效的代码。因为两个名为message
的变量都不会超出它们各自的作用域--在本例中就是周围的括号{}
。
您可能会说:“但是名为message的变量是以任何一种方式定义的-所以message是在if
之后定义的”。
但你就错了。
Java没有free()
或delete
操作符,所以它必须依靠跟踪变量作用域来找出何时不再使用变量(以及对这些原因变量的引用)。
如果你认为你做了好事,那就更糟了。我见过这样的“优化”代码后出现这样的错误:
if(somethingIsTrue()) {
String message = "Everything is fine";
System.out.println(message);
} else {
String message = "We have an error";
System.out.println(message);
}
“哦,有重复的代码,让我们把这条公共代码去掉”->就是这样。
处理这种作用域问题的最常见方法是将else-value预先分配给外部作用域中的变量名,然后在if中重新赋值:
String message = "We have an error";
if(somethingIsTrue()) {
message = "Everything is fine";
}
System.out.println(message);
发布于 2016-05-13 18:09:00
在Eclipse中获取此错误的一种方法是:
在src/test/java
.
A
,在使用类的src/main/java
中定义另一个类B
结果: Eclipse将编译代码,但maven将显示“找不到符号”。
潜在原因: Eclipse对主树和测试树使用组合的构建路径。不幸的是,它不支持对Eclipse项目的不同部分使用不同的构建路径,而这正是Maven所需要的。
解决方案:
Maven不要这样定义你的依赖关系;也就是说,不要让这个mistake.
https://stackoverflow.com/questions/25706216
复制相似问题