2013-07-20 48 views
3

如何從VM參數中優雅地獲取布爾值?我的解決方案並不容易,因爲我從Scala中的VM參數獲取布爾值

  1. 不得不測試它是否爲空,否則我會得到 拋出:IllegalArgumentException

  2. 必須將整個字符串轉換爲大寫或小寫和測試,如果 是完全是「假」或「真」,否則我會在我的臉上拋出相同的異常。

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

有另一種出路呢?謝謝。

回答

5

斯卡拉有sys.props對象包裝了Java系統屬性API,這樣你就可以處理Option而不是null

sys.props.get("property.name") exists (_ equalsIgnoreCase "true") 
2
scala> "true" equalsIgnoreCase "TruE" 
res0: Boolean = true 

scala> "true" equalsIgnoreCase System.getProperty("does.not.exist") 
res1: Boolean = false 
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 
+0

Scala的布爾和java.lang.Boolean之間存在差異。我不想不必要地導入它們。 – thlim