Java泛型萬用字元extends與super

2021-06-23 08:20:38 字數 903 閱讀 7124

static class food{}

static class fruit extends food{}

// complie error:

// flist.add(new fruit());

// flist.add(new object());

flist.add(null); // only work for null

fruit fruit = flist.get(0);
由於,其中放置是從fruit中繼承的型別,所以可以安全地取出fruit型別。

flist.contains(new fruit());
在使用collection中的contains 方法時,接受object 引數型別,可以不涉及任何萬用字元,編譯器也允許這麼呼叫。

list<? super fruit> flist = new arraylist();

flist.add(new fruit());

// compile error:

// compile error:

fruit item = flist.get(0);

因為,list<? super fruit>中的型別可能是任何fruit 的超型別,所以編譯器無法確定get返回的物件型別是fruit,還是fruit的父類food 或 object.

extends 可用於的返回型別限定,不能用於引數型別限定。

super 可用於引數型別限定,不能用於返回型別限定。

>帶有super超型別限定的萬用字元可以向泛型對易用寫入,帶有extends子型別限定的萬用字元可以向泛型物件讀取

Java泛型總結(集合泛型 方法泛型 萬用字元)

1,泛型的限定 public static void main string args swap new string,1,2 swap new integer,2,3 泛型引數必須為引用型別 2,泛型方法 泛型類定義的反應,在整個類中有效,如果被方法使用,那麼泛型類的物件明確要操作的具體型別後,所...

泛型(萬用字元)

1 宣告好泛型型別之後,集合中只能存放特定型別元素 2 泛型型別必須是引用型別 3 使用泛型後取出元素不需要型別轉換.泛型函式 當函式中使用了乙個不明確的資料型別,那麼在函式上就可以進行泛型的定義。public 泛型的宣告 返回值型別 函式名 泛型 變數名 泛型類 修飾符 class 類名 泛型 泛...

泛型 萬用字元

利用泛型技術雖然解決了向下轉型所帶來的安全隱患問題,但同時又會產生乙個新的問題 即便是同乙個類,但是由於設定泛型型別的不同,那麼其物件表示的含義也是不同,是不能夠直接進行引用操作的,例如 現在有如下乙個類。class message public t getmsg 使用萬用字元 解決引數傳遞問題 p...