3

如何优雅地从 VM 参数中获取布尔值?我的解决方案不像我那么容易

  1. 必须测试它是否为空,否则我会得到 IllegalArgumentException

  2. 必须将整个字符串转换为大写或小写,并测试它是否完全是“假”或“真”,否则我将面临同样的异常。

IE

    val property = System.getProperty("some.property.name")
    property != null && property.toLowerCase == "true"

还有其他方法吗?谢谢。

4

3 回答 3

5

Scala 具有sys.props包装 Java 系统属性 API 的对象,因此您可以处理Option而不是null.

sys.props.get("property.name") exists (_ equalsIgnoreCase "true")
于 2013-07-20T21:31:29.327 回答
2
scala> "true" equalsIgnoreCase "TruE"
res0: Boolean = true

scala> "true" equalsIgnoreCase System.getProperty("does.not.exist")
res1: Boolean = false
于 2013-07-20T18:08:09.293 回答
2

java.lang.Boolean#getBoolean(String)如果您不反对调用 Java API 类,则完全符合您的要求:

scala> import java.lang.Boolean
import java.lang.Boolean

scala> Boolean.getBoolean("some.property.name")
res0: Boolean = false

scala> System.setProperty("foo", "true")
res1: String = null

scala> Boolean.getBoolean("foo")
res2: Boolean = true

scala> System.setProperty("bar", "false")
res3: String = null

scala> Boolean.getBoolean("bar")
res4: Boolean = false

scala> System.setProperty("baz", "lorem ipsum")
res5: String = null

scala> Boolean.getBoolean("baz")
res6: Boolean = false
于 2013-07-20T19:16:50.693 回答