我正在重构一些代码,以使它更易于阅读,并且遇到了一些我觉得很奇怪的东西,我想知道是否有人可以向我解释这一点。不同交换机机箱中的变量不能具有相同的名称?
原始代码:
if(tokensLeft == 3) {
String id = tokens.nextToken();
String value = tokens.nextToken();
String trailerId = tokens.nextToken();
rawListener.binaryInfo(id, Integer.parseInt(value), trailerId, this);
} else if(tokensLeft == 2) {
String id = tokens.nextToken();
String value = tokens.nextToken();
rawListener.binaryInfo(id, Integer.parseInt(value), this);
} else {
System.out.println("Method call binaryInfo could not be done because: \"Wrong number of parameters\"");
}
重构后:
switch(tokensLeft) {
case 3:
String id = tokens.nextToken();
String value = tokens.nextToken();
String trailerId = tokens.nextToken();
rawListener.binaryInfo(id, Integer.parseInt(value), trailerId, this);
break;
case 2:
String id = tokens.nextToken(); // Syntax error
String value = tokens.nextToken(); // Syntax error
rawListener.binaryInfo(id, Integer.parseInt(value), this);
break;
default:
System.out.println("Method call binaryInfo could not be done because: \"Wrong number of parameters\"");
break;
}
乍一看,这看起来完全合理的,但是这给了我一个语法错误。
链接为本地重命名的所有引用(在不改变其他文件的引用)
原来,由于某种原因在switch语句中,我无法再次使用String id
和String value
在另一种情况下。
这使命名我的变量相当尴尬。
现在你可以说:“只需在你的switch语句之上声明你的变量。”但这意味着我总是创建我的变量,即使tokensLeft
既不是3或2,我也不需要我的变量。这只是感觉像使用不必要的内存。
任何人都可以向我解释为什么开关盒这样做,我怎么能解决我的问题?
使用方法 - 这是很好的做法反正和你的范围将被分拣为您服务。如果你真的想写意大利面代码,然后使用显式块('{}')。 –