如果你考慮的,例如Boolean::getBoolean
你會發現,在包裝類型簡單地提供一些方便閱讀System::getProperty
實施:
public static boolean getBoolean(String name) {
boolean result = false;
try {
result = toBoolean(System.getProperty(name));
} catch (IllegalArgumentException e) {
} catch (NullPointerException e) {
}
return result;
}
private static boolean toBoolean(String name) {
return ((name != null) && name.equalsIgnoreCase("true"));
}
以上方法只用於檢索類型的屬性或便利如果給定的值是非法的,則爲默認值。
據我所知,只有包裝類型Boolean
,Long
和Integer
提供這樣的方法。 (例如,String
類型確實是not offer such a method,而不是你的問題所暗示的。')理性可能是這些原始類型對於作爲系統屬性移交的屬性而言很常見。例如,您通常不需要用戶通過命令行提供XML結構,僅舉一個例子。
讀取系統屬性是遍佈Java類庫的要求。人們可以將一組類似的便利方法放入內部包中,但我想JDK庫的作者認爲這是與JCL之外的用戶相關並要求公開的要求。最後,包裝類型意味着爲處理基元提供了一些便利。我不知道比包裝類型更好的地方放這些方法。
正如Pablo指出的那樣,十進制值對於命令行屬性來說不是一個很好的值,因爲它是與語言環境相關的小數點分隔符。另外,我想不出JCL中使用的這種屬性。這可以解釋爲什麼從Float
和Double
中缺少類似的方法。另外,因爲byte
,short
和char
在運行時表示爲int
,所以我不會看到這些值的特定用例,或者解釋它們不存在。
我一直想知道爲什麼布爾,Integer和Long有這些方法,因爲它們並不真正涉及到它們相關的類的功能。我懷疑他們是歷史事故,如果從零開始完成,將不會提供。他們真的屬於系統或一些單獨的屬性類。 –
@HotLicks完全是我的想法。這些方法被附加到錯誤的類,並誤導性地命名。 –