新聞中心
我剛剛發(fā)現(xiàn)在 Java 5 里聲明的一個(gè)方法:Integer.getInteger(String):

在永川等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、成都做網(wǎng)站 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),永川網(wǎng)站建設(shè)費(fèi)用合理。
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Integer.html#getInteger(java.lang.String)
根據(jù)指定的名稱得到系統(tǒng)屬性的整數(shù)值。
***個(gè)參數(shù)將被認(rèn)為是系統(tǒng)屬性的名稱。系統(tǒng)屬性可以通過 System.getProperty(java.lang.String)方法訪問得到。屬性值字符串將被解釋成一個(gè)整數(shù),并且以表示這個(gè)值的Integer對象形式返回??赡艹霈F(xiàn)的數(shù)字格式的詳細(xì)說明可以在 getProperty 的定義說明里找到。
那么就讓我來看看是否理解了:
Integer.valueOf(String) 通過假設(shè) String 表達(dá)的是一個(gè)數(shù)值而把 String 轉(zhuǎn)化成數(shù)字。也就是說, Integer.valueOf("12345") 得到數(shù)字 12345。
Integer.getInteger(String) 通過假設(shè) String 是一個(gè)系統(tǒng)屬性數(shù)值的名稱而把 String 轉(zhuǎn)換成一個(gè)數(shù)字。也就是說, Integer.getInteger("12345") 應(yīng)該是得到 null。
有誰會認(rèn)為這兩者之間有足夠清晰的區(qū)別?有多少bug是因?yàn)楸緛硐胧褂胿alueOf但卻使用了getInteger而導(dǎo)致的?
這種形式的方法重載就是所謂的諧音重載(near-phrase overloading)。這是我剛發(fā)明的術(shù)語。它說的是人們使用非常相似的術(shù)語表達(dá)完全不同的東西。看一下 x 和 y 這兩個(gè)詞,一種情況下它們用做 gm(x) 和 gm(y),(譯者注:gm是重量單位’克‘),而另一種上下文中它們用做 cm(x) 和 cm(y)(譯者注:cm是長度單位’厘米‘)。如果你這樣使用
- distance(gm(x), gm(y))< distance(cm(x), cm(y))
那么這就是一種錯(cuò)誤的對 x 的 y 用法!你應(yīng)該在這個(gè)上下文中使用 x 和 y 之外的變量名。事實(shí)上,那個(gè)方法應(yīng)該被叫做 getIntegerProperty。
這是我在Java中看到的絕對會產(chǎn)生歧義一個(gè)最糟糕的案例。他們應(yīng)該把事情做得漂亮些。
Update:結(jié)果我又發(fā)現(xiàn)了更糟糕的一個(gè): Boolean.getBoolean("true") 得出的結(jié)果會等于 Boolean.FALSE。
當(dāng)前名稱:Integer.getInteger你不是在玩我吧?
網(wǎng)頁地址:http://m.fisionsoft.com.cn/article/djpecgd.html


咨詢
建站咨詢
