Groovy 2.1.0带有@CompileStatic的switch case break语句的奇怪行为
我是groovy程序员的新手,在静态编译(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
@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一起工作:-)