2

「スイッチ」のコード「case」が中括弧で囲まれているのを見たことがありません-{}。中かっこを使用して変数を非表示にすることはできますか?それとも悪い習慣ですか?考えられる結果は何ですか?

私はスイッチを使用する必要があります。この場合、それぞれのケースは同じタイプの変数(私の意見では同じ名前を維持する方が良い)から形成されますが、値は異なります。

Dialog dialog;
switch (id) {
    case ID_1: {
        String[] keys = ...; // some array
        String[] values = ...;
        ...
        return dialog;
    }
    ...
        case ID_2: {
        String[] keys = ...; // different values
        ...
        return dialog;
    }
    default:
        return null;
    }
}
4

4 に答える 4

4

中かっこを使用して変数を非表示にすることはできますか?

はい、できます。

それとも悪い習慣ですか?

これは、コードをリファクタリングできることを示している可能性がありますが、それぞれのコードで何が行われているのかを確認せずに判断するのは困難caseです。

考えられる結果は何ですか?

あなたの目標であるこれらの変数の範囲を制限することを除けば何もありません。

于 2012-10-13T14:27:30.487 に答える
1

これは、個々のケースで異なるローカル変数が必要な場合に、実際に非常に一般的な方法です。

ただし、それらを多数必要とする場合、特にそれらがすべてほぼ同一である場合は、コードが過度にコピーペーストされていることを示している可能性があります。

例として、データを除いてそれぞれのコードに大きな違いがない限り、代わりにキーと値を配列またはhastableに保持することが理にかなっている場合があります。

keys   = dialog_data[id].keys;
values = dialog_data[id].values;  

質問には、これが当てはまるかどうかを知るのに十分な情報が実際には含まれていません。

于 2012-10-13T14:30:13.017 に答える
0

コードに定数がある場合、それらをpublic-static-finalフィールドを持つ別のクラスにエクスポートすると、問題が解決する場合があります。コード全体が表示されないため、これ以上は言えません。

于 2012-10-13T14:30:51.720 に答える
0

ダイアログデータをHashTableに保持できます。このようにして、キーセットをトラバースし、それに応じてデータ値を変更できます。

于 2012-10-13T14:51:37.600 に答える