Groovy 2.1.0带有@CompileStatic的switch case break语句的奇怪行为

Groovy 2.1.0带有@CompileStatic的switch case break语句的奇怪行为,groovy,switch-statement,compile-static,Groovy,Switch Statement,Compile Static,我是groovy程序员的新手,在静态编译(@CompileStaticannotation)中遇到了switch-case-break语句的奇怪行为。似乎breaks被忽略。 这是一个bug还是我在阅读文档时遗漏了什么 环境: - 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 @Compile

我是groovy程序员的新手,在静态编译(
@CompileStatic
annotation)中遇到了switch-case-break语句的奇怪行为。似乎
break
s被忽略。
这是一个bug还是我在阅读文档时遗漏了什么

环境:

    - 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

这似乎是Groovy 2.1.0中的一个bug(感谢您将其发布到JIRA,它看起来将在Groovy 2.1.1中修复)

在发布之前,作为一种变通方法,您可以使用带标签的块作为案例语句的
break

        switch (val) {
            case 'A' : A:{
                println("${val} caseA")
                break
            }
            case 'B' : B:{
                println("${val} caseB")
                break
            }
            default : 
                println("${val} default")
        }

在我看来像个bug,你能报告它吗?是的,我刚刚报告了它很酷:-)我在下面发布了一个不太令人愉快的解决方法,让它与2.1.0一起工作:-)