Groovy 2.1.0 странное поведение оператора switch-case-break с @CompileStatic
Я начинающий программист, и я столкнулся со странным поведением оператора switch-case-break со статической компиляцией (@CompileStatic
аннотация). Кажется, что break
s игнорируются.
Это ошибка или я что-то упустил при чтении документации.
Среда:
- 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
1 ответ
Это похоже на ошибку в 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")
}