掌握這幾點泛型就能輕巧的掌握了!

java泛型

1. 什麼是泛型?

2. 泛型到底是幹嘛的。

3. 使用泛型的好處。

4. 爲什麼使用泛型。

5. 泛型的基本用法。

6. 泛型的常見錯誤。

什麼是泛型:

什麼是泛型呢?剛開始接觸的時候我也還是不太明白,用官方的話他叫:變量類型的參數化”,他是JDK1.5中一個重要的特性。通過引入泛型我們將獲得編譯時類型的安全和運行時更小的拋出ClassCastException的可能。

自己對泛型的理解:

人都是懶惰的,總想着一勞永逸,我們用類和方法,只能使用具體的類型,要麼是基本類型,要麼就是自己定義的類,這樣代碼的通用性很差,所以我們的前輩寫出了泛型。所以說:“懶人”成就了科技,讓我們的生活更加的智能化。

泛型到底是幹嘛的:

泛型最多且最典型的是用於集合中。

在沒有泛型的時候我們在集合存入的都是Object類型的數據,需要進行強制轉換轉換我們需要的類型。

 

比如:

import java.util.List;

import java.util.LinkedList;

public class Test {

public static void main(String[] args) {

List list=new LinkedList();

list.add(111);

boolean boo= list.get(0)>2000;1

}

}

這段代碼他會報錯1The operator > is undefined for the argument type(s) Object, int操作符>是未定義的參數類型(s)對象,int)。現在集合中的0下標值爲Object類型的,即使我們對他進行了強轉的處理,他會不進行報錯,但一樣會存在很多異常隱患,且集合中可以存儲很多個的類型,他做不到規範的讀取使用,這個時候就需要用到我們的泛型了。

package fanxingboke;

import java.util.List;

import java.util.LinkedList;

public class Test {

public static void main(String[] args) {

List <Integer>list=new LinkedList<Integer>();

list.add(111);

boolean boo= (int)list.get(0)>2000;

System.out.println(boo);

}

}

如上代碼,咱們在集合類後面加上<>尖括號裏面寫上數據類型,前後尖括號的值必須得一致。這樣咱們就能準確的規範咱們這個集合需要寫上什麼的數據,例如我上面泛型裏規定的是int類型,這個集合只能存儲int類型的數據,如果傳入不是泛型規定的類型,這段代碼就會報錯,你就能及時解決代碼的錯誤,就不會存在安全隱患。

這個咱就可以理解爲方法的傳參,聲明實例的時候就給泛型進行了規定,只能爲咱們規定的類型。

泛型也可以繼承如:

父類:

public class Parent<T1,T2>

{

    private T1 variable1;

    private T2 variable2;

    

    public T1 getvariable1()

    {

        return variable1;

    }

    public void setFoo1(T1 variable1)

    {

        this.variable1= variable1;

    }

    public T2 getvariable2()

    {

        return variable2;

    }

    public void setFoo2(T2 variable2)

    {

        this.variable2= variable2;

    }    

 

}

子類:

public class Child<T1, T2, T3> extends Parent<T1, T2>

{

    private T3 variable3;

 

    public T3 getvariable3()

    {

        return variable3;

    }

 

    public void setFoo3(T3 variable3)

    {

        this.variable3= variable3;

    }

    

}

泛型也可以去實現接口,這個我都不細說了細說就有偏題跑到接口了,給大家留點想象的空間。

泛型的上限和下限:

設置泛型對象的上限使用extends,表示參數類型只能是該類型或該類型的子類:

聲明對象:類名<?extends > 對象名

定義類:類名<泛型標籤 extends >{}

設置泛型對象的下限使用super,表示參數類型只能是該類型或該類型的父類:

聲明對象:類名<?super > 對象名稱

定義類:類名<泛型標籤 extends>{} 

向下引用:

package fanxingboke;

 

import java.util.List;

import java.util.LinkedList;

 

public class Test {

public static void main(String[] args) {

F<? extends Object> f = new F<String>();// 這是聲明實例,向下引用聲明的時候<>裏必須爲extends他後面跟的必須是父級,後面泛型規定尖括號裏必須爲他的子類,也包括他本身。

 

f.D("這是向下引用");

}

}

 

class F<T> {//定義一個泛型類。

public void D(Object object) {

System.out.println(object);

}

}

向上引用:

package fanxingboke;

 

import java.util.List;

import java.util.LinkedList;

 

public class Test {

public static void main(String[] args) {

F<? super String> f = new F<Object>();// 這是聲明實例,向上引用聲明的時候<>裏必須爲關鍵字super他後面跟的必須是子級,後面泛型規定尖括號裏必須爲他的父類,也包括他本身。

 

f.D("這是向上引用");

}

}

 

class F<T> {//定義一個泛型類。

public void D(Object object) {

System.out.println(object);

}

 手動滑稽 - --  - - --  - - -- -

歡迎大家來指點錯誤,更歡迎廣大碼農來討論喲。

最後給大家推薦一本書《站在鉅著之上談泛型》。

 

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