我正在重构一些代码以使其更易于阅读,并且遇到了一些我觉得很奇怪的东西,我想知道是否有人可以向我解释这一点。
原始代码:
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
and 。String value
这使得命名我的变量相当尴尬。
现在你可以说:“只需在你的 switch 语句之上声明你的变量。” 但这意味着我总是创建我的变量,即使tokensLeft
不是 3 或 2 并且我不需要我的变量。感觉就像使用了不必要的内存。
谁能向我解释为什么开关盒会这样做以及如何解决我的问题?