首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

Integer.getInteger 陷阱:當方法重載變成「諧音重載」的命名災難

     編輯:J2EE

Java 5 中發現 Integer.getInteger(String):根據系統屬性名獲取整數值。而非開發者直覺的「將字串解析為整數」(那是 Integer.valueOf(String) 的職責)。

災難現場

方法語義範例
Integer.valueOf("12345")字串解析為整數返回 12345
Integer.getInteger("12345")讀取系統屬性 12345 的值並解析幾乎永遠返回 null
Boolean.getBoolean("true")讀取系統屬性 true 的值返回 Boolean.FALSE(屬性不存在)

本質診斷:Near-Phrase Overloading(諧音重載)

作者創造術語「諧音重載」:極相似的命名(valueOf vs getInteger、gm vs cm)表達完全不同的語義。呼叫端極易在同一上下文誤用,導致隱蔽 Bug。正確命名應為 getIntegerProperty 以揭示「讀取系統屬性」的真實意圖。

教訓

  1. API 設計應避免「諧音重載」,語義差異必須在命名中顯式體現。
  2. 開發者須建立「查閱 Javadoc 再用陌生靜態方法」的肌肉記憶。
  3. 代碼審查時重點檢查 Integer.getInteger/Boolean.getBoolean/Long.getLong 等系統屬性讀取族方法的誤用。

這是 Java 標準庫中最令人困惑的命名陷阱之一——他們本可以做得更漂亮。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved