【发布时间】:2013-07-10 16:22:38
【问题描述】:
我正在重构一些代码以使其更易于阅读,我遇到了一些我觉得很奇怪的东西,我想知道是否有人可以向我解释一下。
原始代码:
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 并且我不需要我的变量。感觉就像在使用不必要的内存。
谁能向我解释一下为什么 switch case 会这样以及我该如何解决我的问题?
【问题讨论】:
-
使用方法 - 无论如何这是一个好习惯,你的范围会为你排序。如果您真的想编写意大利面条式代码,请使用显式块 (
{})。
标签: java variables switch-statement syntax-error