萬用字元型別

2022-06-14 08:15:16 字數 1346 閱讀 9811

在萬用字元型別中,允許型別引數發生變化。例如萬用字元型別pair<? extends employee>

表示任何泛型pair型別,它的型別引數是employee的子類,如pair

假設有乙個方法public static void printbuddies(pairp),那麼就不能將pair傳遞給這個方法。

解決方法就是,使用乙個萬用字元型別:public static void printbuddies(pair<? extends employee> p)

型別pairpair<? extends employee>的子類。

pair<? extends employee>的方法如下:

? extend employee getfirst(); // 可以使用getfirst,將getfirst的返回值賦給乙個employee引用是完全合法的

void setfirst(? extends employee); // 不可能呼叫setfirst方法,因為編譯器只知道需要employee的某個子類,但不知道什麼型別。所以拒絕傳遞任何特定的型別,比較?不能匹配

可以指定乙個超型別限定,如下所示:? super manager

這個萬用字元限制為manager的所有超類。

帶有超類限定的萬用字元和帶有子類限定的萬用字元的行為相反,可以為方法提供引數,但是不能使用返回值。例如pair<? super manager>的方法如下:

void setfirst(? super manager); // 編譯器無法知道setfirst方法的具體型別,因此不能接受引數型別為employee或者object的方法呼叫。只能傳遞manager型別的物件,或者某個子類物件

? super manager getfirst(); // 不能保證返回物件的型別,只能把它賦給乙個object

帶有超類限定的萬用字元允許你寫入乙個泛型物件,而帶有子類限定的萬用字元允許你讀取乙個泛型物件例如,型別pair<?>,有以下方法:

? getfirst(); // getfirst返回值只能賦給乙個object。

void setfirst(?); // setfirst方法不能被呼叫,甚至不能用object呼叫。

pair<?>和pair本質不同在於:可以用任意object物件呼叫原始pair類的setfirst方法。

型別萬用字元

1 定義 為了表示各種泛型list的父類,可以使用型別萬用字元 2 型別萬用字元 list 表示元素型別未知的list,它的元素可以匹配任何的型別 這種帶萬用字元的list僅表示它是各種泛型list的父類,並不能把元素新增到其中 3 如果說我們不希望list 是任何泛型list的父類,只希望它代表某...

型別萬用字元 2020 12 08

型別萬用字元的上限,除了本身還包括自身的子型別 型別萬用字元的下限,除了本身還包括自身的父型別 型別萬用字元的上限 list 示例 list extends number list newarraylist list extends object list2 newarraylist list ex...

sql like 萬用字元 T sql 萬用字元

之所以要寫一篇跟萬用字元有關的知識,是因為在工作中需要檢索基礎表中name為英文名的,突然就一臉懵逼,網上檢索一下發現教程很多。檢討下還是自己基礎知識不紮實。所以寫下方便自己查閱,也歡迎大佬們指點。sql 萬用字元必須與 like 運算子一起使用 在搜尋資料庫中的資料時,sql 萬用字元可以替代乙個...