6 回答
TA贡献1799条经验 获得超6个赞
“变量超出范围”的另一个例子
正如我已经看过几次这样的问题,也许还有一个例子,即使它可能感觉不错也是非法的。
考虑以下代码:
if(somethingIsTrue()) {
String message = "Everything is fine";
} else {
String message = "We have an error";
}
System.out.println(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-values预先分配给外部作用域中的变量名称,然后在以下情况下重新分配:
String message = "We have an error";
if(somethingIsTrue()) {
message = "Everything is fine";
}
System.out.println(message);
TA贡献1820条经验 获得超9个赞
在Eclipse中获取此错误的一种方法:
定义一个类
A
在src/test/java
。B
在src/main/java
该使用类中定义另一个类A
。
结果:Eclipse将编译代码,但maven将给出“找不到符号”。
基本原因:Eclipse正在使用主树和测试树的组合构建路径。不幸的是,它不支持为Eclipse项目的不同部分使用不同的构建路径,这是Maven所需要的。
方案:
不要那样定义依赖关系; 即不要犯这个错误。
定期使用Maven构建代码库,以便尽早发现这个错误。一种方法是使用CI服务器。
TA贡献1801条经验 获得超8个赞
如果你在其他地方的构建中遇到这个错误,而你的IDE说一切都很好,那么检查你在两个地方都使用相同的Java版本。
例如,Java 7和Java 8具有不同的API,因此在较旧的Java版本中调用不存在的API会导致此错误。
TA贡献1876条经验 获得超7个赞
可能存在人们上面提到的各种场景。有几件事帮我解决了这个问题。
如果您使用的是IntelliJ
File -> 'Invalidate Caches/Restart'
要么
被引用的类在另一个项目中,并且该依赖项未添加到我的项目的Gradle构建文件中。所以我添加了依赖使用
compile project(':anotherProject')
它起作用了。HTH!
添加回答
举报