日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java泛型之泛型参数

發布時間:2024/10/12 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java泛型之泛型参数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  在學習編程的過程中,我覺得不止要獲得課本的知識,更多的是通過學習技術知識提高解決問題的能力,這樣我們才能走在最前方,更多Java專業知識,廣州瘋狂java培訓為你講解;

  泛型機制常用的參數有3個:

  “?”代表任意類型。如果只指定了,而沒有extends,則默認是允許任意類。

  extends關鍵字聲明了類型的上界,表示參數化的類型可能是所指定的類型,或者是此類型的子類。

  super關鍵字聲明了類型的下界,表示參數化的類型可能是所指定的類型,或者是此類型的父類型,直至Object前提Fruit是Apple和Orange的超類。

  本章通過java代碼逐一分析泛型參數的意義和區別extends參數:

  [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);//這句可以編譯,因為null沒有類型信息

  }

  在上面的例子中,可以明確從list中取得的記錄一定是Fruit,但是無法確定是Apple,list除了傳入null外,不能添加其他任何參數;分析原因前先看以下的例子:

  [java]

  public void testExtendType(){

  List list = new ArrayList();

  List list2 = new ArrayList();

  List list3 = new ArrayList();

  extend(list2, new Apple());

  }

  從以上代碼可以看出:

  extends關鍵字聲明了類型的上界,表示參數化的類型可能是所指定的類型,或者是此類型的子類,List 可以指向 ArrayList()、ArrayList()、ArrayList()等。現在如果傳入的參數list為new ArrayList(),則此時你向此list中添加Fruit,則肯定報錯。而讀取數據時,不管list是什么類型,讀取的數據肯定都是Fruit,同時Fruit也是Object。

  通過以上的分析,知道直接往繼承extends中的列表中添加記錄是不行的,那么如何向extends修飾的list中添加記錄,可以使用泛型方法來達到目的:

  [java]

  public void extendType2(List list, T date){

  list.add(date);

  }

  調用示例如下:

  [java]

  public void testExtendType2(){

  List list = new ArrayList();

  extendType2(list,new Apple());

  }

  super參數

  super用的不多,只簡單介紹一下。

  [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外,不能添加任何類型的對象(包括Object)。分析原因前先看以下代碼:

  [java]

  public void testSuperType(){

  List list = new ArrayList();

  List list2 = new ArrayList();

  superType(list2, new Apple());

  }

  super關鍵字聲明了類型的下界,表示參數化的類型是所指定的類型,或者是此類型的父類型,直至Object。List 可以引用 List,也可以引用 List,所以無法保證list中都是Apple,但是可以保證,所有list引用的都是Apple的父類,所有向此列表中添加Apple是沒有問題的,而很顯然你向List、List中添加Object、Fruit對象,肯定失敗,只能夠添加Apple。

  ?參數

  “?”代表任意類型。?可以看做 ? 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 的簡化版

  */

  List list = new ArrayList();

  List list2 = new ArrayList();

  List list3 = new ArrayList

  瘋狂Java培訓專注軟件開發培訓,提升學員就業能力,重點提升實踐動手能力。技術知識沉淀深厚的老師,讓你感受Java的魅力,激發你對于編程的熱愛,讓你在半年的時間內掌握8-10萬的代碼量,掌握Java核心技術,成為真正的技術高手;通過大量全真企業項目瘋狂訓練,迅速積累項目經驗。讓你成為技能型的現代化高端人才,迅速獲得高薪就業!時間不等人,趕緊聯系我們吧!瘋狂java培訓中心地址:廣州天河區車陂灃宏大廈3011。

轉載于:https://www.cnblogs.com/gojava/p/3202641.html

總結

以上是生活随笔為你收集整理的Java泛型之泛型参数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。