1. 程式人生 > 實用技巧 >運維自動化釋出系統

運維自動化釋出系統

泛型是一種未知的資料型別,不清楚使用什麼型別的資料時可以使用泛型;

也可以看成一個變數,用來接收資料

例如ArrayList<E>其中的E就是一個泛型

建立集合物件的時候會確定泛型的資料型別

使用泛型的優缺點:

 public static void method1(){
        /*
    不使用泛型
    好處:集合不使用泛型,預設型別是Object類的,可以接收任意資料型別
    缺點:不安全,會引發異常(ClassCastException);

*/

        ArrayList list01= new  ArrayList<>();
        list01.add(
"123"); list01.add(1); Iterator<Object> it = list01.iterator(); while(it.hasNext()){ Object obj = it.next(); System.out.println(obj); //遍歷集合 //想要獲取字串的長度 //這是一個多型,應先向下轉型 String s = (String) obj; System.out.println(s.length());
//會出現ClassCastException,1 不是String型別 } } 使用泛型 好處:1.避免了型別轉換麻煩,儲存的是什麼型別,取出的是什麼型別; 2.把執行期間的異常(執行後丟擲的異常)提升到了編譯期(寫程式碼的時候報錯); 缺點:儲存資料型別單一 */

定義一個含有泛型的類和方法

public class DefineClass<E> {
    //在建立物件時確定泛型的型別
    private int num ;
    //也可以有確定的型別,與普通類一樣
    private
E str; public int getNum() { return num; } public void setNum(int num) { this.num = num; } public E getStr() { return str; } public void setStr(E str) { this.str = str; } //定義一個含有泛型的方法 public static <E> int method(E e,E e1){ System.out.print("傳遞的是:"+e+"e1 "+e1); return 1; } //在呼叫方法是確定泛型的型別(傳遞的是什麼型別,泛型就是什麼型別); public <E> int method1(E e,E e1){ //非靜態方法不會隨物件的型別走,同樣在呼叫方法的時候確定泛型的型別 System.out.print("傳遞的是:"+e+"e1 "+e1); return 1; } }

定義一個含有泛型的介面

public interface DefineInterface<E> {
    public abstract void method02(E e);
}
public class DefinrInterfaceImpl1<E> implements 
  DefineInterface<E> {
//在實現時確定介面的泛型型別
    @Override
    public void method02(E integer) {
        System.out.print("=======");
    }
}
public class Test {
    public static void main(String[] args) {
        DefinrInterfaceImpl1 impl1 = new DefinrInterfaceImpl1();
        impl1.method02(2);

        DefinrInterfaceImpl1<Integer > impl2 = new DefinrInterfaceImpl1<>();
        impl1.method02(22);
        //介面使用什麼泛型,實現類就用什麼泛型,建立物件時確定泛型型別
        //帶有泛型的類

       DefineClass test = new DefineClass();
        test.setStr(2222);
    }
}

泛型統配符

/* 泛型萬用字元<?> 不確定用什麼資料型別,可以使用萬用字元;

只能又來接收資料,不能儲存資料

不能建立物件使用,只能作為方法引數使用

例子:遍歷集合 */

public static void printArray(ArrayList<?> list){
    Iterator<?> it = list.iterator();
    while(it.hasNext()){
        Object obj = it.next();//只有Object類可以接收任意型別
        System.out.println(obj);
    }
}

統配符的高階使用---受限泛型

泛型的上限限定: ? extends E ; 代表泛型只能是E型別的子類或者本身;

? super E ;代表泛型只能是E型別的父類或者本身;