Groovy 2.1.0使用@CompileStatic的switch-case-break语句的奇怪行为
问题描述:
我是新手groovy程序员,面临switch-case-break语句与静态编译(@CompileStatic
注释)的奇怪行为。看起来break
被忽略。
这是一个错误,或者我在阅读文档时遗漏了一些东西。Groovy 2.1.0使用@CompileStatic的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
而且everithing工作鳍片E:
A caseA
B caseB
C default
答
这似乎是在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")
}
+0
Tim,感谢您的解决方法。 – 2013-02-08 15:12:33
看起来像我的错误,你可以在[Groovy的JIRA(http://jira.codehaus.org/browse举报/ GROOVY)? – 2013-02-08 14:30:28
是的,我刚刚报告了它[GROOVY-5984](http://jira.codehaus.org/browse/GROOVY-5984) – 2013-02-08 15:04:19
酷:-)([看起来像昨天已修复](https:// github.com/groovy/groovy-core/commit/89d3c59e5dd377989121ffaddc293c0915ebf69c))我发布了一个模糊的令人不愉快的解决方法,以使其与2.1.0兼容:-) – 2013-02-08 15:13:10