Java中的泛型



  【先寫個例子,幫助理解泛型的格式】

ArrayList<String> list = new ArrayList<String>();//【標準格式】
 ArrayList<Object> list = new ArrayList<String>();  //false
 ArrayList<String> list = new ArrayList<Object>();  //false
 
 【允許的,爲了照顧新老版本問題 】 Android開發中
 ArrayList list3 = new ArrayList<String>(); true 語法沒有問題, 但是會報警告
 ArrayList<String> list2 = new ArrayList(); true 語法沒有問題, 但是會報警告

*********************************************************************************************

集合中的泛型

   在集合的代碼中,有兩個很特殊東西
    <? extends E>
    <? super E>
   E 是泛型
   extends 繼承
   super 調用父類方法的關鍵字
   ? 通配符
   
   需求1:定義一個函數可以接受任意類型,但是這個任意類型必須是數值類型
     也就是Number類或者Number的子類
     
   這裏約束的是【泛型的上限】
  Integer extends Number
  Float extends Number
  Double extends Number
  
  ? extends Number
  
  上限:
   ? extends 要求的數據類型,這裏要求能夠使用的數據類型是要求數據類型本身或者其子類數組
 
 需求2: 定義一個函數只能接受Integer類型或者其父類類型的集合
 
  下限:
   ? super 要求的數據類型  這裏要求能夠使用的數據類型是要求的數據類型本身及其父類
   
 泛型中通配符:
  ?

************************************************************************************************************

自定義泛型

泛型的運用: 
   需求:
    定義一個方法,可以接收任意類型的參數,而且要求返回值類型也是接收的數據類型
    例如:接收String  返回String
      接收int 返回int
     
   自定義泛型!
    定義一個標識符!,格式   <大寫字母>
    
  1.在函數中使用泛型格式:
   修飾符  <聲明自定義泛型的佔位符>  返回值類型//返回值也可以是泛型  函數名(自定義泛型 參數列表, 其他數據類型 參數列表) {
   
   }
   
   泛型中不能直接使用基本數據類型,都是有對應的包裝類型
   byte   --> Byte
   short  --> Short
   int    --> Integer
   long   --> Long
   
   double --> Double
   float  --> Float
   
   boolean --> Boolean
   
   char --> Character

2.類使用泛型

在自定義類中使用自定義泛型
  class 類名<自定義泛型> {
   //在這裏所用用到和類名一致的自定義泛型的位置,都是相同的數據
  }
 
 注意:
  1. 類名中聲明瞭自定義泛型的情況下,如果該類中使用了和類名自定義相同的泛型,不能用到
  static修飾的方法中  【在static修飾的方法中不能使用類名聲明的自定義泛型】
  
  2. 當一個類使用了自定義泛型,在創建該類的對象的時候,給予了泛型的具體類型,那麼在這個類
  當中所有使用到這個泛型的位置都會變成這個具體的數據類型
  
  3. 如果一個要求有泛型的類對象,在創建的時候沒有給予具體的數據類型,所有使用到該泛型的
  位置都會變成Object
  
 [問題]
 在一個用泛型修飾的類當中,static修飾的方法,能否使用泛型???
 如果是static修飾的方法, 指定使用當前方法自定義的泛型

3.接口中使用自定義泛型
  
  interface 接口名<自定義泛型> {
   成員變量; //public static final
   成員方法; //abstract
  }
  
  注意事項:
  ( 1). 如果一個類【遵從】接口,而且這個接口是帶有自定義泛型的,那麼這個類就是要在類名之後加上對應
   泛型
   (2). 如果一個類【遵從】接口,而且這個接口是帶有自定義泛型的,那麼裏面所有【遵從】接口要完成的方法
   使用到的泛型,都是接口規定的泛型
   
   (3.) 有兩種【遵從】方式,第一種:使用泛型【遵從】       第二種:【遵從】的時候,給定具體的數據類型
   
         PlanA:
                 這個泛型的具體數據類型是通過用戶創建該類的對象時提供的,可以更加具體的使用情況,做成
                 不同的數據類型
         PlanB:
                 這個泛型在【遵從】時已經確定,那麼這個泛型意義不大
    
   [推薦使用PlanA,根據實際情況,確定泛型的類型}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章