Вопрос по static, java, initialization – Как вернуться из статического блока инициализации в Java

7

Я хочу вернуться из статического блока.

Похоже, что оператор возврата и разрыва не работает. Есть ли альтернатива?

Я знаю, что плохой обходной путь может быть создание флага и проверить флаг, чтобы продолжить или нет.

Я понимаю, что блоки инициализации предназначены не для выполнения вычислений, а просто для базовой инициализации во время загрузки класса.

Я не могу понять проблему. Пожалуйста, объясните это ясно или предоставьте свой код для легкого понимания. Kalai Selvan Ravi
пожалуйста, предоставьте ваш исходный код Dmitry Zagorulkin
@Kalai Полагаю, он имеет в видуreturn не может использоваться внутри блока инициализатора. JLS 14.17: & quot; [...] Ошибка времени компиляции, если оператор возврата содержится в инициализаторе экземпляра или статическом инициализаторе [...] & quot; Carlos Heuberger

Ваш Ответ

5   ответов
1

Статические инициализаторы не имеют сложного бизнеса, поэтому это, вероятно, плохая идея (даже если вы не покупаете SESE).

Минимальный способ добиться возврата - использовать помеченный перерыв.

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

Они довольно редки, обычно появляются во вложенныхfor петли. Новинка может предупредить читателя о том, что происходит что-то немного странное.

7

return просто оберните ваш условный код вif.

0

Вы не можете вернуться из статического блока инициализатора. Некуда вернуться. Но это не должно быть необходимо. Вы должны иметь возможность реструктурировать свой код так, чтобы он был «единой записью, однократным выходом».

Я должен был бы согласиться с этим утверждением, оно также предоставило бы намного более чистый (и более легкий для чтения) код.
18

Делегируйте код приватному статическому методу:

static {
    initialize();
}

private static void initialize() {
    foo();
    if (someCondition) {
        return;
    }
    bar();
}
Более чистый способ написания инициализированных блоков. saurabh agrawal
0

Вы не можете вернуться из статического блока, но лучше использовать какую-то другую функцию, которая будет выполнять вашу логику и вернуться в блок.

Похожие вопросы