Java 5 中發現 Integer.getInteger(String):根據系統屬性名獲取整數值。而非開發者直覺的「將字串解析為整數」(那是 Integer.valueOf(String) 的職責)。
| 方法 | 語義 | 範例 |
|---|---|---|
Integer.valueOf("12345") | 字串解析為整數 | 返回 12345 |
Integer.getInteger("12345") | 讀取系統屬性 12345 的值並解析 | 幾乎永遠返回 null |
Boolean.getBoolean("true") | 讀取系統屬性 true 的值 | 返回 Boolean.FALSE(屬性不存在) |
作者創造術語「諧音重載」:極相似的命名(valueOf vs getInteger、gm vs cm)表達完全不同的語義。呼叫端極易在同一上下文誤用,導致隱蔽 Bug。正確命名應為 getIntegerProperty 以揭示「讀取系統屬性」的真實意圖。
Integer.getInteger/Boolean.getBoolean/Long.getLong 等系統屬性讀取族方法的誤用。這是 Java 標準庫中最令人困惑的命名陷阱之一——他們本可以做得更漂亮。