自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

為什么要使用String

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

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

  1. void dwarwle(HashMap<String,Dwarwable> mapToDwarwle, String dwarwleKey){ 
  2.     forfinal Entry<String, Dwarwable> entry : mapToDwarwle.entrySet()){ 
  3.         dwarwle(entry.getKey(),entry.getValue(),dwarwleKey); 
  4.     } 

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

“參數(shù)類型使用接口,調(diào)用時(shí)傳入實(shí)現(xiàn)該接口的對(duì)象。”

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

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

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

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

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

“實(shí)踐才是檢驗(yàn)真理的***標(biāo)準(zhǔn)。”

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

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

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

責(zé)任編輯:張偉 來源: ImportNew
相關(guān)推薦

2011-03-08 12:59:38

proftpd

2017-07-03 13:33:42

AndroidItemDecorat

2011-04-14 09:30:15

集合框架

2010-05-11 10:29:06

Unix awk

2014-05-19 15:52:57

Apache StraApache

2014-04-25 10:05:42

OpenStack私有云公共云

2024-01-24 11:24:03

C++編程異常處理

2013-09-27 11:33:57

交換機(jī)技術(shù)Vlan技術(shù)

2023-09-21 09:00:00

Merge Que開發(fā)工具Mergify

2014-01-03 10:59:34

2023-03-06 08:01:25

structGo語言

2021-12-24 17:01:29

Linux工具系統(tǒng)

2024-01-01 08:57:55

ODBCSqlServer數(shù)據(jù)庫

2022-04-26 16:56:20

行為數(shù)據(jù)數(shù)據(jù)

2018-05-01 06:43:33

2024-02-20 22:13:49

SQL語句編程

2020-08-24 07:03:10

物聯(lián)網(wǎng)設(shè)備RTOS物聯(lián)網(wǎng)

2021-02-18 09:23:47

數(shù)據(jù)庫分區(qū)數(shù)據(jù)庫倉庫

2020-02-20 16:42:40

云端Kubernetes容器

2021-08-03 10:16:00

物聯(lián)網(wǎng)LoRaIoT
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)