1. 程式人生 > 其它 >回顧總結14

回顧總結14

泛型

泛型

之前存在的問題

  1. 不能對加入到集合ArrayList中的資料型別進行約束(不安全)
  2. 遍歷的時候,需要進行型別轉換,如果集合中的資料量較大,對效率有影響。
  3. 集合中是可以加入所有Object型別的元素的,不好統一管理,呼叫方法。

優點

  1. 編譯時,檢查新增的元素,提高了安全性
  2. 減少了型別轉換的次數,提高了效率
  3. 不再提示編譯警告

含義

泛型可看做廣泛型別,可以代表一類物件

  1. 泛型又稱引數化型別,是JDK5.0出現的新特性,解決資料型別的安全性問題

  2. 在類宣告或例項化時只要指定好需要的具體的型別即可

  3. Java泛型可以保證如果程式在編譯時沒有發出警告,執行時就不會產生ClassCastException異常。同時,程式碼更加簡潔、健壯

  4. 泛型的作用是:可以在類宣告時通過一個標識表示類中某個屬性的型別,或是某個方法的返回值的型別,或者是引數型別

    //E具體的資料型別在定義的Person物件的時候指定,即在編譯期間,就確定E是什麼型別
    Person<String> person = new Person<String>();
    
    class Person<E>{
        E s;//表示s的資料型別,該資料在定義Person物件的時候指定
        public Person(E s){//E也可以是引數型別
            this.s = s;
        }
        public E f(){//E也可以是返回值型別
            return s;
        }
    }
    //當新建物件的時候,可以傳進去E的具體型別
    //比如String,E和String的關係類似,形參和實參。
    

details

  1. 泛型存放的只能是引用型別,不能是基本資料型別
  2. 指定泛型具體型別後,可以傳入子類或者實現類。多型的用法。
  3. 泛型使用形式
    • List list = new ArrayList();
    • List list = new ArrayList<>();簡寫推薦
  4. 預設是使用了Object的泛型的

自定義泛型

基本語法

class 類名<T,R...>{}

detials

  1. 普通成員可以使用泛型(屬性、方法)
  2. 使用泛型的陣列,不能初始化
  3. 靜態方法中不能使用類的泛型
  4. 泛型類的型別,是在建立物件時確定的(因為建立物件時,需要指定確定型別)
  5. 如果在建立物件時,沒有指定型別,預設為Object
class Tiger<T,R,M>{
    String name;
    R r;//屬性使用泛型
    M m;
    T t;
    public Tiger(String name,R r,M m,T t){
        //構造器使用泛型
        this.name = name;
        this.r = r;
        this.m = m;
        this.t = t;
    }
    public R setR(){//方法使用泛型
        
    }
}

自定義泛型類

  1. T,R,M泛型的識別符號,一般是單個大寫字母

  2. 泛型識別符號可以有多個

  3. 普通成員可以使用泛型(屬性、方法)

  4. 使用泛型的陣列,不能初始化

    泛型是在建立物件時給予,初始化是在類的載入時開闢空間(不確定空間的大小)

  5. 靜態方法中不能使用類的泛型

    泛型是在建立物件時給予,靜態成員(屬性、方法)是在類的載入時確定,給予空間,初始化

自定義泛型介面

介面的屬性都是靜態的。不能在接口裡定義泛型屬性

使用到了泛型,但是沒有指定泛型種類的,會預設有Object,但是不易於閱讀,所以不建議省略

自定義泛型方法

修飾符<T,R...>返回型別 方法名(引數列表){}

details

  1. 泛型方法,可以定義在普通類中,也可以定義在泛型類中
  2. 當泛型方法被呼叫時,型別會確定
  3. public void eat(E e){}修飾符後沒有<T,R...>eat方法不是泛型方法,而是使用了泛型(泛型是不能憑空使用的,方法沒有定義泛型,只能使用類的泛型)

繼承和萬用字元

  1. 泛型不具備多型。不能定義父類,傳遞子類
  2. :支援任意泛型
  3. :支援A類以及A類的子類,規定了泛型的上限
  4. :支援A類以及A類的父類,不限於直接父類,規定了泛型的下限

JUnit

Java語言的單元測試框架

多出Java的開發環境都已經繼承了JUnit作為單元測試的工具