程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2EE >> Integer.getInteger你不是在玩我吧?

Integer.getInteger你不是在玩我吧?

編輯:J2EE

我剛剛發現在 Java 5 裡聲明的一個方法:Integer.getInteger(String):

http://java.sun.com/J2SE/1.5.0/docs/api/java/lang/Integer.Html#getInteger(Java.lang.String)

根據指定的名稱得到系統屬性的整數值。

第一個參數將被認為是系統屬性的名稱。系統屬性可以通過 System.getProperty(Java.lang.String)方法訪問得到。屬性值字符串將被解釋成一個整數,並且以表示這個值的Integer對象形式返回。可能出現的數字格式的詳細說明可以在 getProperty 的定義說明裡找到。

那麼就讓我來看看是否理解了:

Integer.valueOf(String) 通過假設 String 表達的是一個數值而把 String 轉化成數字。也就是說, Integer.valueOf("12345") 得到數字 12345。

Integer.getInteger(String) 通過假設 String 是一個系統屬性數值的名稱而把 String 轉換成一個數字。也就是說, Integer.getInteger("12345") 應該是得到 null。

有誰會認為這兩者之間有足夠清晰的區別?有多少bug是因為本來想使用valueOf但卻使用了getInteger而導致的?

這種形式的方法重載就是所謂的諧音重載(near-phrase overloading)。這是我剛發明的術語。它說的是人們使用非常相似的術語表達完全不同的東西。看一下 x 和 y 這兩個詞,一種情況下它們用做 gm(x) 和 gm(y),(譯者注:gm是重量單位’克‘),而另一種上下文中它們用做 cm(x) 和 cm(y)(譯者注:cm是長度單位’厘米‘)。如果你這樣使用

  1. distance(gm(x), gm(y))< distance(cm(x), cm(y))

那麼這就是一種錯誤的對 x 的 y 用法!你應該在這個上下文中使用 x 和 y 之外的變量名。事實上,那個方法應該被叫做 getIntegerProperty。

這是我在Java中看到的絕對會產生歧義一個最糟糕的案例。他們應該把事情做得漂亮些。

Update:結果我又發現了更糟糕的一個: Boolean.getBoolean("true") 得出的結果會等於 Boolean.FALSE。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved