17

有没有更“Groovy”的方式来编写这个 Groovy 代码:

def myVar=(System.getProperty("props") == null)?
    null : System.getProperty("props")

逻辑是:

  • 如果System.getProperty("props")是NULL,我想props是NULL;
  • 否则,我想props成为System.getProperty("props")
4

1 回答 1

42

通常,对于空检查,我使用?:(elvis 运算符,如果左侧为 null 或解析为 false,则返回默认值)或?.(安全导航,如果左侧为 null,则计算为 null)。如果要设置在属性不存在时使用的默认值,可以执行以下操作:

def myVar = System.properties['props'] ?: 'mydefaultvalue'

如果在 System.properties 中找不到键“props”的任何内容(或者如果返回的值解析为 false),则将 myVar 设置为“mydefaultvalue”。但是由于您的情况下的默认值为 null 那么

def myVar = System.properties['props']

也可以完成这项工作,因为当没有找到给定键的任何内容时,就会返回 null。

这里的 Groovy-ifications 是:

  • 如果您不需要 GroovyString 插值,则更喜欢单引号字符串而不是双引号字符串

  • 对地图和列表使用带括号的索引语法(而不是'get'或'put')

  • 如果 getter 没有参数,则使用缩短的属性形式(不带前缀)(与 Java 不同,Groovy 实现了通用访问原则);对 Java 程序员来说是一种便利,但在 Groovy 中不需要getSystem.getProperty(String)

  • 缩短 default-if-null 案例?:

这个成语在 JavaScript 中使用||

def myVar = System.properties['props'] || 'mydefaultvalue'

在 Groovy 中不起作用。布尔测试的结果是布尔值,因此 myVar 设置为 true。

于 2014-07-30T14:42:31.607 回答