Почему Java допускает помеченные разрывы для произвольных операторов?

Я только что узнал сегодня, что следующий код Java является совершенно допустимым:

myBlock: {
    /* ... code ... */

    if (doneExecutingThisBlock())
        break myBlock;

    /* ... more code ... */
}

Обратите внимание, что myBlock не является циклом - это просто блок кода, который я выделил фигурные скобки.

Это кажется довольно странной особенностью. Это означает, что вы можете использовать именованный break для выхода из оператора if или анонимного блока, хотя обычно вы не можете использовать оператор break в этих контекстах.

У меня такой вопрос: есть ли веская причина для этого дизайнерского решения? То есть, зачем делать так, чтобы вы могли вырваться из некоторых закрывающих операторов, используя помеченные break s, но не обычные break s? И зачем вообще допускать такое поведение? Учитывая, насколько (сравнительно) хорошо спроектирована Java как язык, я предполагаю, что для этого есть причина, но, честно говоря, я не могу придумать ни одной.

13
задан GEOCHET 7 August 2015 в 04:39
поделиться