Java基礎之淺談泛型

漁夫會扎蛙發表於2022-04-06

一、Java泛型

1.1為什麼使用泛型

  • 今天我們來了解一下泛型的優點與不足。
  • 使用泛型,可以使我們不必在進行型別強制轉換。
  • 簡化了我們的程式碼,但是我們需要考慮用哪一種型別才比較合適
  • 讓你的程式可讀性更加,同時也更加的安全

1.2學會使用泛型

  • Java中通常使用變數E表示集合元素型別,K和V分別表示鍵和值的型別。T表示"任意型別"。
  • 這也是泛型入門的基礎,學會如何使用泛型。
  • 簡單定義一個泛型的類
public class Test1<T> {
    T age;  //定義泛型變數,泛型T就相當於基本資料型別。
    T first;
    private T second;
    public Test1(T age) {
        this.age = age;
    }
}
class B {
    public static void main(String[] args) {
        Test1<String> test1 = new Test1<>("13");//這裡就體現了泛型的靈活性。我們可以傳入任意的型別。
        Test1<Integer> test2 = new Test1<>(15);
    }
}
  • 泛型方法
public <T> T Test2(T age) {
        return age;
    }
//我們可以傳入任意型別的引數

1.3泛型的繼承

  • 如果我們要使用一個介面中的方法,那麼我們可以利用泛型的繼承來實現
public static <T extends Comparable> T Test3(T[] a){
        //這樣就繼承了Comparable的方法
        //但是這裡的T只能使用 實現了Comparable介面的類。
    }
  • 你可能會好奇,Comparable不是介面嗎,為什麼要用extends?反正都是這麼用的,記住得了。
  • 我們可以使用"&"萬用字元繼承多個<T extends Comparable & List>
    我們來討論一個繼承關係:
public class Father {
}

class Son extends Father {
    public static void main(String[] args) {
        ArrayList<Father> list1 = new ArrayList<>();
        ArrayList<Son> list2 = list1;//這是錯誤的❌
      //他們兩個沒有任何關係
    }
}

1.4型別擦除

  • 型別擦除就是將我們的Java程式碼,轉換成普通程式碼。
  • 轉換成它的頂級父類。
  • 瞭解吧

public class Test1<T> {
    T age;
    T first;
    //擦除後變成
    Object age;
    Object first;
}

1.5靜態與捕獲異常

  • 不能再靜態欄位或方法中引用型別變數。
  • public static T test();//Error❌
  • 不能丟擲或者捕獲泛型類的實力
try{
       
   }catch(T e){
       //不可以O
   }

二、萬用字元概念

  • 在萬用字元型別中,允許型別引數發生變化。Pair<? extends Employee>表示任何泛型Pair型別,它的型別引數是Employee的子類,如Pair,但不是Pair。這個是繼承方面的。
  • 萬用字元的超型別限定:<? super Manager>表示為Manager的所有父類。
  • 無限定萬用字元:Pair<?>
  • 額。。。。瞭解即可吧/(ㄒoㄒ)/~~

三、結尾

  • 對於泛型內容就總結這麼多,若想深入學習等待後續更新,基礎部分掌握這些足矣。如果有不足之處,希望大家多多包涵,多多支援。如果有不懂的地方可以直接私信問我,歡迎來訪!
  • 我將會繼續更新關於Java的學習知識,感興趣的小夥伴可以關注一下。
  • 文章寫得比較走心,用了很長時間,絕對不是copy過來的!
  • 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。
  • ?你的點贊與關注,是我努力前行的無限動力。?

相關文章