Groovy 中的布尔求值与 Java 中不同。在 Java 中,if 语句的条件部分必须是一个布尔表达式,比如
if(obj == null)
,if(a > 0)
等这样的形式。Groovy 中没有这么挑剔。它会尝试推断,所以需要知道它的推断原理。如果在需要布尔值的地方放了一个对象引用,Groovy 会检查该引用是否为 null。它将 null 视作 false。 如果对应引用不为 null,表达式的结果还与对象的类型有关。比如,如果对象是一个集合,那么 Groovy 会检查该集合是否为空。只有当集合不空时才是 true。
Groovy 中类型与布尔值推断逻辑
类型 为真的条件
Boolean 值为true
Collection 集合不为空
Character 值不为0
CharSequence 长度大于0
Enumeration Has More Elements() 为 true
Iterator hasNext() 为 true
Number Double 值不为0
Map 该映射不为空
Matcher 至少有一个匹配
Object[] 长度大于0
其他类型 引用不为 null
- 除了使用 Groovy 内置的布尔求值约定,在自己的类中,还可以通过实现 asBoolean() 方法来编写自己的布尔转换。