44 鹹魚學Java 萬用字元

2021-08-20 10:00:35 字數 1560 閱讀 1054

萬用字元是另外一種型別,其傳入的為未知型別

萬用字元用?表示,其具有上界而且具有下界,定義方式分別為

上界< ? extends object>不知道是什麼型別但是肯定是object的子類

下界< ? super object>不知道是什麼型別但是肯定是object的父類

上界也叫子型別限定(及他可以接受此類的所有繼承類)

extends a 這個型別限定為此類的所有子類

下界也叫超型別限定(及他可以接受此類的基類和基類的基類等)

super a這個型別限定為a的所有超類(父類)直至object。

arraylist super a> a = new arraylist<>();

a.add(new c());

a.add(new b());

a.add(new a());

for (object object : a)

結果

time20180530.c@e61fd1

time20180530.b@331059

time20180530.a@766a24

可以看出當我將a設定為下界的時候

因為編譯器知道我肯定會放進去a,或者a的子類,所以編譯器可以讓我add進去。

arraylist extends c> b = new arraylist<>();

//編譯出錯

b.add(new c());

a a2 = b.get(1);

編譯出錯

因為

因為編譯器不知道當前list所持有的型別因為其限定為上界c,而c若有多個子類,那麼list到底是哪種型別,所以他拒絕我add,但是在get的時候,因為其get的所有子類都可以轉換為c呼叫子類所具有的方法,所以編譯器會返回乙個c的物件。

所以其實上界表示可以獲取到返回值,但是不能設定引數。

下界可以設定引數,但是不能使用返回值

如果你想從乙個資料型別裡獲取資料,使用 ? extends 萬用字元

如果你想設定引數,使用 ? super 萬用字元

如果即想存又想取,不能用萬用字元

a

extends b> a = new a();

a.seta(null);

b a2 = a.geta();

a super b> b = new a();

b.seta(new b());

object b1 = b.geta();

43 鹹魚學Java 泛型程式設計

泛型是程式語言的一種特性。允許程式設計師在強型別程式語言中編寫 時定義一些可變部分,那些部分在使用前必須作出指明。先將之前寫過的棧轉換為泛型棧 泛型棧 author 14831 param public class tstack 有參建構函式 param i 棧的長度 public tstack i...

12 鹹魚學Java 陣列排序之選擇,插入

public static void selectsort int a 每次找到最小的放到前面,則最後陣列有序 選擇排序每次再數列裡面找到其後數列中最小的數,放到有序數列的最後位置,直到最後全部有序 public static void insertsort int a else a j 1 tem...

萬用字元匹配 LeetCode44

給定乙個字串 s 和乙個字元模式 p 實現乙個支援 和 的萬用字元匹配。可以匹配任何單個字元。可以匹配任意字串 包括空字串 兩個字串完全匹配才算匹配成功。說明 示例 輸入 s aa p 輸出 true 解釋 可以匹配任意字串。dp陣列的含義 dp i j 表示字串中前i個字元和字元模式中前j個字元是...