一、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過來的!
- 尊重每一位學習知識的人,同時也尊重每一位分享知識的人。
- ?你的點贊與關注,是我努力前行的無限動力。?