第25條 列表優先於陣列

2022-08-29 00:33:23 字數 659 閱讀 4216

陣列與泛型相比,有兩個重要的不同點。陣列是協變的(如果sub是super的子型別,那麼陣列型別sub是super的子型別),相反,泛型是不可變得,對於任意兩個不同的型別t1和t2,list和list沒有子型別或超型別的關係。

//

這段**在執行時出錯

object o = new long[1];

o[0] = "i don't fit it";

//這段**在編譯時出錯

listo = new arraylist();

o.add("i don't fit it";

一段**:

static

e reduce(listlist, functionf, e initval)

會有一條警告,編譯器無法再編譯時知道e是什麼,所以是乙個非受檢的警告。

修改成列表代替陣列:

static

e reduce(listlist, functionf, e initval)

e result =initval;

for(e e : snapshot)

return

result;

}

這樣不會再收到警告,因為編譯器可以保證型別轉換自動進行,不會出錯。

(25) 列表優先於陣列

陣列是協變的 convariant 如果sub是super的子型別,那麼陣列型別sub就是super的子型別。object obs new long 1 obs 0 hhe 這是可以的 泛型卻是不可變的,list不是list的子型別。listlist new arraylist 編譯錯誤 list....

第16條 復合優先於繼承

這裡的繼承是實現繼承而非介面繼承。與方法呼叫不同的是,繼承打破了封裝性 換句話說,子類依賴於其超類中特定功能的實現細節。超類的實現有可能會隨著髮型版本的不同而發生改變,如果真的發生了變化,子類可能會遭到破壞,即使他的 完全沒有改變。因此,子類必須跟著超類的更新而改變,除非超類是專門為擴充套件而設計的...

第20條 類層次優先於標籤類

標籤類值帶有兩種甚至多種風格的例項的類,如乙個表示圓或者矩形的類 class figure final shape shape double length double width double radius figure double radius figure double length,dou...