Groovy支持Java中常见的if - else语法
def x = false def y = false if ( !x ) { x = true } assert x == true if ( x ) { x = false } else { y = true } assert x == y
Groovy也支持普通的Java“嵌套”if - else if语法:
if ( ... ) { ... } else if (...) { ... } else { ... }
Groovy中的switch语句是向后兼容Java代码的,所以你可以让多个case共享一段代码。
然而,有一个不同之处就是,Groovy的switch语句可以处理任意类型的值,并且可以执行不同类型的匹配。
def x = 1.23 def result = "" switch ( x ) { case "foo": result = "found foo" // 让我们继续执行 case "bar": result += "bar" case [4, 5, 6, 'inList']: result = "list" break case 12..30: result = "range" break case Integer: result = "integer" break case Number: result = "number" break default: result = "default" } assert result == "number"
switch支持如下类型的比较
default必须放在switch/case语句的最后,就如Jochen在groovy-user邮件列表中的这个帖子中所指出的,他提到:
“因为Java的switch/case语句并不像Groovy的switch/case语句那样工作。在Java中,case只能取int兼容的常量,在Groovy中,它可以取表达式。在Java中,所有的case共享一个作用域,在Groovy中,每个case都有它自己的作用域。在Groovy中,我们调用isCase方法,在Java中,我们switch的必须是一个数字。譬如,如果我们使用一个闭包作为case值,那么这可能会产生副作用。在一些情况下我们可以让它们表现相同,而且通常当使用Java版的时候,你不会发现在Groovy中有什么不同,除了default的位置和逻辑。”
所以,在Java中default可以放在switch/case语句的任何地方,而在Groovy中default的使用更像一个else语句,而不是指定一个默认情况。
case语句通过使用isCase(switchValue)方法来对case值执行一次匹配,这个方法默认是调用equals(switchValue)方法,但是已经被一些类型(如类和正则表达式等)所覆盖。
所以你可以创建你自己的匹配器类型,并添加一个isCase(switchValue)方法来提供你自己的匹配方法。