Почему я не могу создать переменные в каждом случае с тем же именем. Например, из кода ниже, в case 3
, он будет жаловаться, что String name
уже существует, но почему? Case 1
никогда не был и никогда не будет называться.Повторное копирование переменных в случае коммутатора
Я бы не хотел извлекать определения из switch-case
. Итак, почему с помощью операторов if
он позволяет определять одинаковые имена в каждом случае, но в switch-case
это не так?
Вот простой Java код с корпусом переключателя:
int type = 3;
switch (type) {
case 1:
String name = (String) respone.get("name");
user.setName(name);
break;
case 2:
String surname = (String) respone.get("surname");
user.setSurname(surname);
break;
case 3:
String name = (String) respone.get("name");
user.clearName(name);
break;
default:
...
}
Ответ может быть «потому что». Я предполагаю, что это потому, что блоки 'case:' не являются действительно блоками в отношении компилятора - они имеют метки в одном блоке 'switch'. Таким образом, область локальных переменных - это блок переключателей. – millimoose
Вы всегда можете поместить непосредственно casted '(String) respone.get (" foo ")' в вызываемую вами функцию ... – LaGrandMere
Хороший вопрос, но уже много ответов, например дубликат: http: // stackoverflow. com/a/3894215/1081849 – sbk