色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

java里的泛型和通配符

Java里的泛型是一種用于創(chuàng)建可變類型的語法結(jié)構(gòu)。它可以讓開發(fā)者在編寫代碼時(shí),使用一種安全的方式來操作各種數(shù)據(jù)類型,并在運(yùn)行時(shí)保持類型安全和一致性。以“ArrayList”為例,這里的“”表示這個(gè)ArrayList只能存儲(chǔ)String類型的對(duì)象,其他數(shù)據(jù)類型都將被排除。

ArrayListlist = new ArrayList<>();
list.add("hello");
list.add("world");
// list.add(123); // 錯(cuò)誤的類型,編譯器會(huì)報(bào)錯(cuò)

泛型的使用可以讓代碼更加可讀,并避免了類型轉(zhuǎn)換時(shí)出現(xiàn)的錯(cuò)誤。不過在實(shí)際應(yīng)用中,我們常常需要把一個(gè)泛型類或方法作為另一個(gè)泛型類或方法的參數(shù),這時(shí)候就需要使用通配符。

ArrayListlist = new ArrayList<>();
// 針對(duì)元素的讀操作可以使用通配符
Object obj1 = list.get(0);
// 針對(duì)元素的寫操作并不安全,編譯器會(huì)報(bào)錯(cuò)
// list.add("hello");

通配符“?”表示這個(gè)ArrayList可以存儲(chǔ)任意類型的對(duì)象,但是不能往里面寫入任何類型的對(duì)象。這是因?yàn)椋诰幾g時(shí),編譯器無法確定通配符代表的具體類型,所以無法對(duì)寫操作進(jìn)行類型檢查。這時(shí)候我們需要使用“extends”關(guān)鍵字來對(duì)通配符進(jìn)行限定。

class Parent {}
class Child extends Parent {}
ArrayListlist = new ArrayList<>();
// 針對(duì)元素的讀操作可以使用通配符,元素可以是Parent或其子類Child的實(shí)例
Parent obj1 = list.get(0);
Child obj2 = (Child) list.get(1);
// 針對(duì)元素的寫操作仍然不安全,編譯器會(huì)報(bào)錯(cuò)
// list.add(new Parent());
// list.add(new Child());

通過“extends”關(guān)鍵字,我們可以限定這個(gè)ArrayList中元素的類型是Parent或其子類。這時(shí)候我們通過通配符可以安全地讀取其中元素,但寫操作仍然不被允許,因?yàn)榫幾g器無法確定這個(gè)ArrayList的具體類型。需要注意的是,這種限定只能是上界限定,即指定元素類型的最大范圍。