1. 程式人生 > >泛型通配符

泛型通配符

extends list oid str ati 簡單 super 但是 producer

1.通配符

泛型通配符有兩種

上界通配符<? extends xx>

下界通配符<? super xx>

2.舉例說明

先上代碼吧

class A{
    
}
class B extends A{
    
}
class C extends A{
    
}
public class NonCovariantGenerics {
    public static void main(String[] args) {
        List<? extends A> list1= new ArrayList<B>();
        List
<? super B> list2= new ArrayList<B>(); //list1.add(new B()); 編譯出錯 list2.add(new B()); } public static <T> void f1(List<T> list,T item) { list.add(item); } }

結構很簡單的類,B和C都繼承基類A.

<? extends A>的意思表示某一個類,這個類是繼承自A,確定了上界,但是問題就來了,繼承A的類有B和C,編譯器無法確定具體的子類型,所以編譯出錯.

<? super B>表示某一個類,這個類是B的父類(超類),確定了下界,也就是說,<? super B>表示B,A以及B的其他父類(java只有單繼承,這裏只是舉例),雖然不確定是具體的哪一個父類,但是<? super B> 包含了B,所以編譯不出錯.

3.總結

讀取用 extends

寫入用super

(拓展)PESC 原則(Producer Extends Consumer Super)

  

  

泛型通配符