Groovy 2.1.0 странное поведение оператора switch-case-break с @CompileStatic

Я начинающий программист, и я столкнулся со странным поведением оператора switch-case-break со статической компиляцией (@CompileStaticаннотация). Кажется, что breaks игнорируются.
Это ошибка или я что-то упустил при чтении документации.

Среда:

    - groovy sdk 2.1.0
    - Oracle JDK build 1.7.0_13-b20 on Mac OS X Lion 10.7.5

Прецедент:

import groovy.transform.CompileStatic
@CompileStatic
class Test {
    def test() {
        ['A', 'B', 'C'].each { String val ->
            switch (val) {
                case 'A' :
                    println("${val} caseA")
                    break
                case 'B' :
                    println("${val} caseB")
                    break
                default : 
                    println("${val} default")
            }
        }
    }
}
(new Test()).test()

Выход:

A caseA
A caseB
A default
B caseB
B default
C default

Второй тест: просто комментарий @CompileStatic

И все работает отлично

A caseA
B caseB
C default

1 ответ

Это похоже на ошибку в Groovy 2.1.0 (спасибо, что опубликовали ее в JIRA, похоже, что это будет исправлено в Groovy 2.1.1)

В качестве обходного пути до тех пор, пока это не будет выпущено, вы можете использовать помеченные блоки для своих операторов case с break

        switch (val) {
            case 'A' : A:{
                println("${val} caseA")
                break
            }
            case 'B' : B:{
                println("${val} caseB")
                break
            }
            default : 
                println("${val} default")
        }
Другие вопросы по тегам