I was refactoring some code to make it easier to read and I ran into something that I find weird and I was wondering if anyone could explain this to me.
Original code:
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\""); } After refactoring:
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; } At first glance this looks perfectly reasonable, but this gives me a syntax error.
Link all references for a local rename (does not change references in other files)
It turns out that for some reason in a switch statement, I am unable to use the String id and String value again in a different case.
This makes naming my variables rather awkward.
Now you could say: "Just declare your variables above your switch statement." But that would mean that I always create my variables, even if tokensLeft is neither 3 or 2 and I wouldn't need my variables. That just feels like using unnecessary memory.
Can anyone explain to me why the switch case does this and how I could solve my problem?
{}).