1. 程式人生 > 其它 >Java重溫學習筆記一,泛型萬用字元

Java重溫學習筆記一,泛型萬用字元

一、常用的 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