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

前端之家收集整理的这篇文章主要介绍了Groovy 2.1.0带有@CompileStatic的switch-case-break语句的奇怪行为前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我是新手groovy程序员,我遇到了使用静态编译(@CompileStaticannotation)的switch-case-break语句的奇怪行为.似乎忽略了休息.
这是一个错误还是我在阅读文档时遗漏了一些东西.

环境:

- 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中的一个错误(感谢将其发布到JIRA,看起来它将在Groovy 2.1.1中修复)

作为一种解决方法,在此版本发布之前,您可以使用带标记的块来为case语句中断

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

猜你在找的Groovy相关文章