9

アクションバーに関する本に記載されているAndroidコードの例では、次のようなサンプルが提供されています。

MenuItem menu1 = menu.add(0, 0, 0, "Item 1");
{
  menu1.setIcon(R.drawable.ic_launcher);
  menu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}

セミコロンの後に中括弧を使用するにはどうすればよいですか? ここで私が理解していない概念が明らかにあります。

4

3 に答える 3

17

この場合、それらは完全にオプションであり、副作用はまったくありません。あなたの例では、コントロールに属するプロパティの割り当てを意図することにより、コードをより読みやすくするという目的にのみ役立ちます。中括弧なしでそれを行うこともできます。しかし、ツールを使用してコードを再フォーマットすると、インデントがなくなる可能性があります。

ただし、メソッドがあり、そこに {} を入れると、新しい変数スコープを作成できます。

void someMethod() {
    {
         int x = 1;
    }
    // no x defined here
    {
         // no x here, so we may define a new one
         string x = "Hello";
    }
}

ステートメント (変数宣言、メソッド呼び出し、ループなど) を開始できるメソッド内の任意の場所で、新しいスコープを開始できます。

注: たとえば、if ステートメントがある場合、その中かっこを使用して新しい変数スコープも作成します。

void someMethod() {
    if (someThing) {
         int x = 1;
    }
    // no x defined here
    if (somethingElse) {
         // no x here, so we may define a new one
         string x = "Hello";
    }
}

while、for、try、catch などについても同様です。考えてみれば、メソッド本体のブレースでさえそのように機能します。それらは、クラススコープの上の「レイヤー」である新しいスコープを作成します。

于 2013-06-13T10:28:21.197 に答える
15

これは匿名コード ブロックと呼ばれ、restrict the variable scope.

于 2013-06-13T10:28:04.883 に答える
0

これらは初期化ブロックです。

これは初期化ブロックの正しい使い方ではないと思います。作成した例とは別に、これらのブロックは初期化の目的でのみ使用されます。詳細を表示するには、ここをクリックしてください。

于 2013-06-13T10:39:46.900 に答える