萬用字元是另外一種型別,其傳入的為未知型別
萬用字元用?
表示,其具有上界而且具有下界,定義方式分別為
上界< ? 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個字元是...