天天看點

字元串方法綜合使用_為什麼要使用字元串

字元串方法綜合使用_為什麼要使用字元串

字元串方法綜合使用

最近,我在一次教育訓練課程中輔導國中生。 任務之一是編寫一個類,該類可以根據某些字元串鍵使映射變形。 建立的初級人員之一的結果包含以下方法:

void dwarwle(HashMap<String,Dwarwable> mapToDwarwle, String dwarwleKey){
		for( final Entry<String, Dwarwable> entry : mapToDwarwle.entrySet()){
			dwarwle(entry.getKey(),entry.getValue(),dwarwleKey);
		}
	}
           

該代碼通常還可以。 使用散清單中配置設定給它的實際鍵來對單個可變形條目進行變形的方法,并且該變形鍵被分解為單獨的方法。 非常簡單,我不在這裡列出。 隻要您知道什麼實際上是矮人,變量名也有意義。 該方法簡短易懂,但是參數清單需要一個

HashMap

而不是

Map

。 為什麼我們要限制調用者使用

HashMap

? 如果調用者有一個

TreeMap

并且有充分的理由,該怎麼辦。 我們是否想要一種可以使

TreeMap

相形見separate的單獨方法? 當然不是。

期望接口,通過實作。

大三學生将代碼替換為

HashMap

改為Map,但是大約五分鐘後,這位聰明的女士舉起了手,并提出了以下問題:

“如果我們将HashMap更改為Map,為什麼不将String更改為CharSequence?”

當問題突然出現時,要回答這樣的問題并非易事。 我想到的第一件事是原因是我們通常以這種方式這樣做,這就是原因。 但這不是一個真正的論點,至少我不會接受那樣的事情,除了學生我也不接受這樣的回答。 無論如何,這将是非常獨裁的風格。

真正的答案是,該參數用作映射中的鍵,并且映射的鍵應該是不可變的(至少突變應具有對等值和哈希碼計算的彈性)。

CharSequence

是一個接口,而Java中的接口(很遺憾)不能保證不變性。 隻有實作可以。

String

是此接口的一個良好的,廣為人知的且經過測試的實作,是以可以是一個不錯的選擇。 關于stackoverflow有很好的讨論。

在這種特殊情況下,我們期望實作,因為我們需要不可變的東西,并且我們“不能”信任調用方傳遞不可變的字元序列實作。 或者:可以,但是要付出代價。 如果随後傳遞并修改了

StringBuilder

,那麼我們矮小的庫可能無法正常工作,并且可能會開始責備戰争。 在設計API和庫時,我們不僅應考慮可能的使用,還應考慮實際的平均使用情況。

一個庫與它所使用的庫一樣好,而不是可以使用的庫。

這也可以應用于其他産品,不僅是庫,而且可能會導緻太大的問題(實體和武器)。

翻譯自: https://www.javacodegeeks.com/2014/10/why-to-use-string.html

字元串方法綜合使用