Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Added Jochen's notes on how default works in switch/cases for Groovy

...

  • Class case values matches if the switchValue is an instanceof the class
  • Regular expression case value matches if the string of the switchValue matches the regex
  • Collection case value matches if the switchValue is contained in the collection. This also includes ranges too (since they are Lists)
  • if none of the above are used then the case value matches if the case value equals the switch value

default: must go at the end of the switch/case as Jochen outlined in this thread from the groovy-user mailing list which Jochen states:

"because a Java switch/Case does not work like a Groovy switch/case. In Java a case can take only int compatible constants, in Groovy it can take expressions. In Java all cases share a scope, in Groovy each case has its own scope. In Groovy we call the isCase method, in Java it has to be a number we switch with. If we for example use a closure as case, then this might cause side effects. There are cases where we can let them behave the same and usually when using the java version you won't see a difference in Groovy besides the placement and logic of default."

So, while in Java the default can be placed anywhere in the switch/case, the default in Groovy is used more as an else than assigning a default case.

How switch works

The case statement performs a match on the case value using the isCase(switchValue) method, which defaults to call equals(switchValue) but has been overloaded for various types like Class or regex etc.

...