Страницы

Поиск по вопросам

понедельник, 12 ноября 2018 г.

Switch: использование фигурных скобок в case перед break

public void onClick(View v) { switch (v.getId()) { case R.id.start: { Intent intent = new Intent(); intent.setClass(this, Menu.class); startActivity(intent); } break; case R.id.records: Intent intent = new Intent(); intent.setClass(this, RecordList.class); startActivity(intent); break; } }
В обработке первой кнопки есть фигурные скобки, хотел бы понять как они в данном случае работают. Если их убрать, то будет жалоба на то, что два одинаковых названия intent, пусть даже стоит оператор break. Если я вдруг напишу такой код, что первая кнопка не будет переходить по созданному интенту и у меня будет возможность кликнуть и по второй кнопке, то что-то нехорошее произойдет.


Ответ

{ ... } в данном случае - это просто (анонимный) блок кода. И сделано это, видимо, только для того, чтобы не было конфликта имён переменных.

В этом ответе говорится, что использование таких блоков - это зачастую признак плохо написанного кода. Утверждение, конечно, можно считать спорным, но конкретно в этом случае создание Intent-а, а также вызовы методов setClass и startActivity можно вынести из switch-а, оставив в case-ах только выбор класса:
Class clazz = null; switch (v.getId()) { case R.id.start: clazz = Menu.class; break; case R.id.records: clazz = RecordList.class; break; } if (clazz != null) { Intent intent = new Intent(); intent.setClass(this, clazz); startActivity(intent); }

Комментариев нет:

Отправить комментарий