陣列與泛型相比,有兩個重要的不同點。陣列是協變的(如果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";
一段**:
statice reduce(listlist, functionf, e initval)
會有一條警告,編譯器無法再編譯時知道e是什麼,所以是乙個非受檢的警告。
修改成列表代替陣列:
statice 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...