2013-06-13 21 views
9

W przykładzie android kod podany w książce dotyczące pasku akcji, próbka podana jest jako następujące:za pomocą przycisku {} po średnikiem

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

Jak za pomocą nawiasów klamrowych po średnikiem możliwe? Jest pewna koncepcja, której tutaj nie rozumiem.

+3

o ile mi wiadomo, jest to tak samo, jak gdybyś opuścił {}. menu.add to jedno polecenie, menu.setIcon to następne menu.setShowAsAction następne. Klamry mogą być używane do deklarowania bloków kodu. – damian

+0

Tylko duplikat tego * jeśli wiesz * jest to anonimowy blok kodu. – Raedwald

Odpowiedz

17

Są całkowicie opcjonalne w tym przypadku i nie mają żadnego efektu ubocznego. W twoim przykładzie jest to jedyny cel, który ma na celu uczynienie kodu bardziej czytelnym poprzez zamiar przypisania nieruchomości do kontrolki. Równie dobrze można to zrobić bez aparatu ortodontycznego. Ale jeśli użyjesz narzędzia do ponownego sformatowania kodu, wcięcie prawdopodobnie zniknie.

Jednakże, jeśli masz metoda i umieścić {} tam, można utworzyć nowy zakres Zmienna:

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

można rozpocząć nowy zakres nigdzie w sposób, w którym można rozpocząć oświadczenie (deklaracja zmiennej, wywołanie metody, pętla itp.)

Uwaga: Jeśli masz na przykład instrukcję if, utworzysz również nowy zakres zmiennej z tymi nawiasami klamrowymi.

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"; 
    } 
} 

To samo dotyczy, gdy, dla, spróbować, złapać i tak dalej. Jeśli się nad tym zastanowić, to nawet nawiasy korpusu metody działają w ten sposób: tworzą nowy zakres, który jest "warstwą" na szczycie zakresu klasy.

+1

jasne wyjaśnienie. Dziękuję Ci. –

+0

nie ma za co! – Mene

15

To się nazywa anonimowe bloki kodu, mają one być restrict the variable scope.

0

Są to Inicjalizacja bloki.

Nie sądzę, że jest to prawidłowe użycie bloku inicjalizacji. Oprócz przykładu, który stworzyłeś, bloki te są używane tylko do celów inicjalizacji. Click Here, aby uzyskać szczegółowy widok.

+1

Oni * mogą * być inicjatorem, ale mogą to być również proste instrukcje blokowe w ramach metody. Nie możemy powiedzieć, nie widząc kontekstu. –

+0

z pewnością użycie jest całkowicie zależne od programisty – R9J

Powiązane problemy