Java重溫學習筆記一,泛型萬用字元
阿新 • • 發佈:2021-06-19
一、常用的 T,E,K,V,?,通常情況下,是這樣約定的(非必須):
- ?表示不確定的 java 型別
- T (type) 表示具體的一個java型別
- K V (key value) 分別代表java鍵值中的Key Value
- E (element) 代表Elem
二、無邊界萬用字元?,看下面的程式碼:
import java.util.*; public class MyDemo { public static void printList(List<?> list) { for (Object o : list) { System.out.println(o); } }public static void main(String[] args) { List<String> l1 = new ArrayList<>(); l1.add("aa"); l1.add("bb"); l1.add("cc"); printList(l1); List<Integer> l2 = new ArrayList<>(); l2.add(11); l2.add(22); l2.add(33); printList(l2); } }
二、上界萬用字元 < ? extends E>,
import java.util.*; public class MyDemo { class Animal{ public int countLegs(){ return 3; } } class Dog extends Animal{ @Override public int countLegs(){return 4; } } // 限定上界,但是不關心具體型別是什麼,對於傳入的 Animal 的所有子類都支援 static int countLegs (List<? extends Animal > animals ) { int retVal = 0; for ( Animal animal : animals ) { retVal += animal.countLegs(); } return retVal; } // 這段程式碼就不行,編譯時如果實參是Dog則會報錯。 static int countLegs1 (List< Animal > animals ) { int retVal = 0; for ( Animal animal : animals ) { retVal += animal.countLegs(); } return retVal; } public static void main(String[] args) { List<Dog> dogs = new ArrayList<>(); // 不會報錯 System.out.println(countLegs(dogs)); // 報錯 // countLegs1(dogs); } }
三、下界萬用字元 < ? super E>,用 super 進行宣告,表示引數化的型別可能是所指定的型別,或者是此型別的父型別,直至 Object。程式碼就不示範了。
文章參考:
https://www.cnblogs.com/minikobe/p/11547220.html