Java泛型之泛型参数
在學(xué)習(xí)編程的過程中,我覺得不止要獲得課本的知識(shí),更多的是通過學(xué)習(xí)技術(shù)知識(shí)提高解決問題的能力,這樣我們才能走在最前方,更多Java專業(yè)知識(shí),廣州瘋狂java培訓(xùn)為你講解;
泛型機(jī)制常用的參數(shù)有3個(gè):
“?”代表任意類型。如果只指定了,而沒有extends,則默認(rèn)是允許任意類。
extends關(guān)鍵字聲明了類型的上界,表示參數(shù)化的類型可能是所指定的類型,或者是此類型的子類。
super關(guān)鍵字聲明了類型的下界,表示參數(shù)化的類型可能是所指定的類型,或者是此類型的父類型,直至Object前提Fruit是Apple和Orange的超類。
本章通過java代碼逐一分析泛型參數(shù)的意義和區(qū)別extends參數(shù):
[java]
public void extend(List list, Fruit fruit){
Fruit now = list.get(0);
System.out.println("now==>" + now);
// Apple a = list.get(0); 無法通過編譯
Object o = list.get(0);
System.out.println(o);
// list.add(fruit); //這句話無法編譯
// list.add(new Object()); // 無法通過編譯
list.add(null);//這句可以編譯,因?yàn)閚ull沒有類型信息
}
在上面的例子中,可以明確從list中取得的記錄一定是Fruit,但是無法確定是Apple,list除了傳入null外,不能添加其他任何參數(shù);分析原因前先看以下的例子:
[java]
public void testExtendType(){
List list = new ArrayList();
List list2 = new ArrayList();
List list3 = new ArrayList();
extend(list2, new Apple());
}
從以上代碼可以看出:
extends關(guān)鍵字聲明了類型的上界,表示參數(shù)化的類型可能是所指定的類型,或者是此類型的子類,List 可以指向 ArrayList()、ArrayList()、ArrayList()等。現(xiàn)在如果傳入的參數(shù)list為new ArrayList(),則此時(shí)你向此list中添加Fruit,則肯定報(bào)錯(cuò)。而讀取數(shù)據(jù)時(shí),不管list是什么類型,讀取的數(shù)據(jù)肯定都是Fruit,同時(shí)Fruit也是Object。
通過以上的分析,知道直接往繼承extends中的列表中添加記錄是不行的,那么如何向extends修飾的list中添加記錄,可以使用泛型方法來達(dá)到目的:
[java]
public void extendType2(List list, T date){
list.add(date);
}
調(diào)用示例如下:
[java]
public void testExtendType2(){
List list = new ArrayList();
extendType2(list,new Apple());
}
super參數(shù)
super用的不多,只簡(jiǎn)單介紹一下。
[java]
public void superType(List list, Apple apple){
Object o = list.get(0);
System.out.println(o);
// Apple a = list.get(0); // 不能編譯
// Apple apple = list.get(0); // 不能編譯
list.add(apple);
// list.add( new Object()); // 不能編譯
// list.add( new Fruit()); // 不能編譯
}
在以上代碼中,從list中讀取的記錄無法確定是任何類型(除Object),list除了添加Apple外,不能添加任何類型的對(duì)象(包括Object)。分析原因前先看以下代碼:
[java]
public void testSuperType(){
List list = new ArrayList();
List list2 = new ArrayList();
superType(list2, new Apple());
}
super關(guān)鍵字聲明了類型的下界,表示參數(shù)化的類型是所指定的類型,或者是此類型的父類型,直至Object。List 可以引用 List,也可以引用 List,所以無法保證list中都是Apple,但是可以保證,所有l(wèi)ist引用的都是Apple的父類,所有向此列表中添加Apple是沒有問題的,而很顯然你向List、List中添加Object、Fruit對(duì)象,肯定失敗,只能夠添加Apple。
?參數(shù)
“?”代表任意類型。?可以看做 ? extends Object 的縮寫。
[java]
public void wideCardType(List list, Fruit fruit ){
Object o = list.get(0);
System.out.println(list.get(0));
// list.add(fruit); // 不能編譯
// list.add(new Object()); // 不能被編譯
}
[java]
public void testWideCardType(){
/**
* ? 可以看做 ? extends Object 的簡(jiǎn)化版
*/
List list = new ArrayList();
List list2 = new ArrayList();
List list3 = new ArrayList
瘋狂Java培訓(xùn)專注軟件開發(fā)培訓(xùn),提升學(xué)員就業(yè)能力,重點(diǎn)提升實(shí)踐動(dòng)手能力。技術(shù)知識(shí)沉淀深厚的老師,讓你感受Java的魅力,激發(fā)你對(duì)于編程的熱愛,讓你在半年的時(shí)間內(nèi)掌握8-10萬的代碼量,掌握J(rèn)ava核心技術(shù),成為真正的技術(shù)高手;通過大量全真企業(yè)項(xiàng)目瘋狂訓(xùn)練,迅速積累項(xiàng)目經(jīng)驗(yàn)。讓你成為技能型的現(xiàn)代化高端人才,迅速獲得高薪就業(yè)!時(shí)間不等人,趕緊聯(lián)系我們吧!瘋狂java培訓(xùn)中心地址:廣州天河區(qū)車陂灃宏大廈3011。
轉(zhuǎn)載于:https://www.cnblogs.com/gojava/p/3202641.html
總結(jié)
以上是生活随笔為你收集整理的Java泛型之泛型参数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 25个吸引眼球的广告设计
- 下一篇: 使命召唤16steam版没有战区吗?