static
class
food
static
class
fruit
extends
food
static
class
extends
fruit
static
class
extends
list<
?extends
fruit
> flist =
newarraylist()
;// complie error:
// flist.add(new fruit());
// flist.add(new object());
flist.
add(null)
;// only work for null
list<? extends fruit> 表示 「具有任何從fruit繼承型別的列表」,編譯器無法確定list所持有的型別,所以無法安全的向其中新增物件。可以新增null,因為null 可以表示任何型別。所以list 的add 方法不能新增任何有意義的元素,但是可以接受現有的子型別list 賦值。
fruit fruit = flist.
get(0)
;get(0
);
由於,其中放置是從fruit中繼承的型別,所以可以安全地取出fruit型別。
flist.
contains
(new
fruit()
);flist.
contains
(new()
);
在使用collection中的contains 方法時,接受object 引數型別,可以不涉及任何萬用字元,編譯器也允許這麼呼叫。
extends控制了元素的返回型別,所以在以下場景使用
newarraylist
<
>()
;list<
?extends
fruit
> lstfruit;
//可以將具體子型別的list賦給泛型list,在新增完成後就只能取值
add(
new())
;add
(new()
);system.out.
println
(lstfruit.
get(0)
);
list<
?super fruit> flist =
newarraylist
();flist.
add(
newfruit()
);flist.
add(
new())
;flist.
add(
new())
;// compile error:
list<
?super fruit> flist =
newarraylist()
;
// compile error:
fruit item = flist.
get(0)
;
因為,list<? super fruit>中的型別可能是任何fruit 的超型別,所以編譯器無法確定get返回的物件型別是fruit,還是fruit的父類food 或 object. 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...