在萬用字元型別中,允許型別引數發生變化。例如萬用字元型別pair<? extends employee>
表示任何泛型pair
型別,它的型別引數是employee
的子類,如pair
假設有乙個方法public static void printbuddies(pairp)
,那麼就不能將pair傳遞給這個方法。
解決方法就是,使用乙個萬用字元型別:public static void printbuddies(pair<? extends employee> p)
。
型別pair
是pair<? 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 萬用字元可以替代乙個...