日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
為什么要使用String

最近在培訓(xùn)課期間指導(dǎo)初學(xué)者。任務(wù)之一就是要大家完成一個類,要求這個類對key為String類型的map執(zhí)行dwarwle操作。其中一位學(xué)員完成的類中,有如下方法:

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、重慶小程序開發(fā)公司、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了都江堰免費建站歡迎大家使用!

 
 
  1. void dwarwle(HashMap mapToDwarwle, String dwarwleKey){ 
  2.     for( final Entry entry : mapToDwarwle.entrySet()){ 
  3.         dwarwle(entry.getKey(),entry.getValue(),dwarwleKey); 
  4.     } 

這段代碼總的來說是OK的。該方法將map中每個Dwarable的key和值,以及和它期望被分解的dwarwleKey一同傳得給另一個調(diào)用方法。因為功能簡單,我就不詳細描述了。只要了解dwarwle的含義,就能輕易地知道這個方法會干什么。這樣的函數(shù)簡單且具有較好的可讀性。但是,這個方法期待參數(shù)是一個HashMap,而不是Map。為什么在這里我們會強迫調(diào)用者使用HashMap呢?如果調(diào)用者出于某種原因需要使用TreeMap,那么是不是還要重新添加另外一個相同的方法來接受TreeMap呢? 當(dāng)然不是。

“參數(shù)類型使用接口,調(diào)用時傳入實現(xiàn)該接口的對象?!?/p>

這位初學(xué)者使用Map代替了HashMap。但是大約5分鐘之后,這位聰明的女士又提出了這樣一個問題:

“如果我們用Map替換HashMap,那么為什么不用CharSequence來替換String呢?”

突然要回答這樣的問題可不是那么容易的。首先我想到是,我們通常都那么做,這就是原因。但是這個答案根本沒有說服力,至少我本人不會接受這樣的回答,我也希望我的學(xué)生不要接受這樣的答案。這是一種非常獨裁方式的回答。

真正的答案是,因為這個參數(shù)作為Map的key,而Map的key通常期望是不可變的(至少變化不會影響equals和hashCode的計算)。CharSequence是一個接口,Java并沒有規(guī)定接口的可變性,只有具體的實現(xiàn)才能決定。String是CharSequence的具體實現(xiàn),被廣泛熟知并且經(jīng)過了嚴(yán)格的測試,在這里是個不錯的選擇。

在這個具體的例子中,我們更傾向于String,因為它是不可變的(Immutable)。并且我們不能完全信任調(diào)用者會傳遞一個不可變的CharSequence的具體實現(xiàn)。假如我們可以信任調(diào)用者,那么我們可能為此付出代價。當(dāng)StringBuilder作為參數(shù)傳遞到該方法,并且之后它的值發(fā)生了改變,我們寫的類庫就很可能不會工作。當(dāng)設(shè)計API或者類庫的時候,我們要考慮的不僅是我們期望的某些可能,而且需要考慮現(xiàn)實中的種種可能。

“實踐才是檢驗真理的***標(biāo)準(zhǔn)?!?/p>

不僅限于類庫,這也可能適用于其他產(chǎn)品。這似乎扯遠了。

原文鏈接: javacodegeeks 翻譯: ImportNew.com - nealjob

譯文鏈接: http://www.importnew.com/13664.html


文章題目:為什么要使用String
文章源于:http://www.dlmjj.cn/article/dpjccih.html