从Scala中的VM参数获取布尔值

时间:2013-07-20 17:28:04

标签: scala idiomatic

如何从VM参数中优雅地获取布尔值?我的解决方案并不像我一样简单

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

  2. 必须将整个String转换为大写或小写并测试是否     它完全是“假”或“真”,否则我会有同样的     我脸上的异常。

  3. 即。

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

    还有另外一种方法吗?感谢。

3 个答案:

答案 0 :(得分:5)

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

sys.props.get("property.name") exists (_ equalsIgnoreCase "true")

答案 1 :(得分:2)

scala> "true" equalsIgnoreCase "TruE"
res0: Boolean = true

scala> "true" equalsIgnoreCase System.getProperty("does.not.exist")
res1: Boolean = false

答案 2 :(得分:2)

如果您不反对调用Java API类,那么

java.lang.Boolean#getBoolean(String)正是您所寻找的:

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