2012-06-20 12 views
7

Chcę wrócić z bloku statycznego.Jak powrócić ze statycznego bloku inicjowania w java

Wygląda na to, że instrukcja return i break nie działa. Czy jest jakaś alternatywa.

Wiem, że złym sposobem obejścia tego problemu może być utworzenie flagi i sprawdzenie flagi, aby kontynuować.

Rozumiem, że bloki inicjalizacyjne nie są przeznaczone do wykonywania obliczeń, ale tylko do podstawowej inicjalizacji podczas ładowania klasy.

+3

Proszę podać kod źródłowy –

+0

Nie mogę zrozumieć problemu. Wyjaśnij to jasno lub podaj swój kod, aby ułatwić zrozumienie. –

+1

@Kalai Przypuszczam, że on oznacza, że ​​'return' nie może być użyty wewnątrz bloku inicjalizatora. JLS 14.17: "[...] Jest to błąd podczas kompilacji, jeśli instrukcja return znajduje się w inicjatorze instancji lub statycznym inicjalizatorze [...]" –

Odpowiedz

7

Zamiast używać return po prostu zapisz kod warunkowy w postaci if.

18

Delegat kod do prywatnej metody statycznej:

static { 
    initialize(); 
} 

private static void initialize() { 
    foo(); 
    if (someCondition) { 
     return; 
    } 
    bar(); 
} 
+0

czystszy sposób pisania bloków inialize. –

0

Nie można powrócić ze statycznego bloku inicjatora. Nie ma gdzie wrócić. Ale nie powinno to być konieczne. Powinieneś być w stanie zrestrukturyzować swój kod na "pojedynczy wpis, jedno wyjście".

+0

Musiałbym zgodzić się z tym stwierdzeniem, dałoby to również znacznie czystszy (i łatwiejszy do odczytania) kod. – Anders

0

Nie można powrócić z bloku statycznego, ale lepiej użyć innej funkcji, która wykona logikę i powróci do bloku.

1

Statyczne inicjatory nie mają komplikacji biznesowych, więc jest to prawdopodobnie zły pomysł (nawet jeśli nie kupisz SESE).

Minimalnym sposobem uzyskania zwrotu jest użycie oznaczonej przerwy.

static { 
    init: { 
     ... 
      break init; 
    } 
} 

są raczej rzadkie, zazwyczaj występujące w zagnieżdżonych for pętli. Nowość może wskazać czytelnikowi, że dzieje się coś podejrzanego.

Powiązane problemy