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.
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')