The Java switch statement looks pale compared to Groovy's switch statement. In Groovy we can use different classifiers for a switch statement instead of only an int or int-derived type. Anything that implements the isCase()
method can be used as a classifier. Groovy already added an isCase()
method to Class
(uses isInstance
), Object
(uses (equals
), collections (uses contains
) and regular expressions (uses matches
). If we implement the isCase
method in our own Groovy classes we can use it as a classifier as well. Finally we can use a closure as a classifier. The closure will be evaluated to a boolean value.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | def testSwitch(val) { def result switch (val) { case ~/^Switch.*Groovy$/: result = 'Pattern match' break case BigInteger: result = 'Class isInstance' break case 60 .. 90 : result = 'Range contains' break case [ 21 , 'test' , 9.12 ]: result = 'List contains' break case 42.056 : result = 'Object equals' break case { it instanceof Integer && it < 50 }: result = 'Closure boolean' break default : result = 'Default' break } result } assert 'Pattern match' == testSwitch( "Switch to Groovy" ) assert 'Class isInstance' == testSwitch(42G) assert 'Range contains' == testSwitch( 70 ) assert 'List contains' == testSwitch( 'test' ) assert 'Object equals' == testSwitch( 42.056 ) assert 'Closure boolean' == testSwitch( 20 ) assert 'Default' == testSwitch( 'default' ) |