问题
I'm novice groovy programmer, and I faced weird behaviour of switch-case-break statement with static compilation (@CompileStatic
annotation). It seems that break
s are ignored.
Is it a bug or I've missed something while reading documentation.
Environment:
- groovy sdk 2.1.0
- Oracle JDK build 1.7.0_13-b20 on Mac OS X Lion 10.7.5
Test case:
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()
Output:
A caseA
A caseB
A default
B caseB
B default
C default
Second test: just comment @CompileStatic
And everithing works fine:
A caseA
B caseB
C default
回答1:
This seems to be a bug in Groovy 2.1.0 (thanks for posting it to the JIRA, it looks like it will be fixed in Groovy 2.1.1)
As a workaround until this is released, you can use labeled blocks for your case statements with break
switch (val) {
case 'A' : A:{
println("${val} caseA")
break
}
case 'B' : B:{
println("${val} caseB")
break
}
default :
println("${val} default")
}
来源:https://stackoverflow.com/questions/14774709/groovy-2-1-0-weird-behaviour-of-switch-case-break-statement-with-compilestatic