CurryPanのブログ

カレーパンとプログラミング

【Java】switch構文で”重複ローカル変数”の警告が出た

以下のようにswitchのcase文の中でローカル変数を定義したときのことです。

switch (dog) {
case SHIBA:
    String name = "柴太郎";
    break;

case MAME_SHIBA:
    String name = "豆太郎"; // "重複ローカル変数"の警告
    break;

default:
    break;
}

switch構文内で2回目に出現したString nameにおいて、"重複ローカル変数"の警告が出現しました。どうやらswitch構文内は同一スコープなのでローカル変数は使いまわせるよ、ということみたいです。

したがって、

switch (dog) {
case SHIBA:
    String name = "柴太郎";
    break;

case MAME_SHIBA:
    name = "豆太郎";
    break;

default:
    break;
}

このように同一の変数定義をしないようにするか、それがわかりにくければ

switch (dog) {
case SHIBA: {
    String name = "柴太郎";
    break;
}

case MAME_SHIBA: {
    String name = "豆太郎";
    break;
}

default:
    break;
}

波括弧{}を使用してスコープを明示して、各case内にスコープを限定してやればよいとのことでした。

お恥ずかしながら、{}でスコープが決まるということを今回初めて知りました。
確かにそうですよね~。