亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java泛型該怎么使用

Java泛型該怎么使用

弒天下 2018-06-24 10:50:59
看的視頻中雖然已經講出了,但是還是希望有字面的解釋能容易理解些,具體泛型怎么用,希望指點。
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

具體使用方法~

1、定義泛型類

在定義帶泛型的類時,在緊跟類命之后的 < >內,指定一個或多個泛型的名字,同時也可以對泛型的取值范圍進行限定,多個泛型之間用,號分隔。

定義完泛型后,可以在定義位置之后的類的幾乎任意地方(靜態塊,靜態屬性,靜態方法除外)使用泛型,就像使用普通的類型一樣。

注意,父類定義的泛型不能被子類繼承。

例:

//自定義一個泛型
public class MyGenerics <T1,T2 > {
    private T1 param1;    
    private T2 param2;    
    public T1 getParam1() {
            return param1;    
    }    
    public void setParam1(T1 param1) {
            this.param1 = param1;    
    }    
    public T2 getParam2() {        
            return param2;    
    }    
    public void setParam2(T2 param2) {
            this.param2 = param2;    
    }
}

使用自定義的泛型:

public static void main(String[] args) {    
    //使用自定義的泛型
    MyGenerics <Integer, String > myGenerics = new MyGenerics <Integer, String >();
    myGenerics.setParam1(1);
    myGenerics.setParam2("abc");
}

注意:如果一個泛型函數在一個泛型類里面出現,最好避免在方法的泛型和類的泛型中使用同樣的名字來避免混淆。對內部類也是同樣。

2、定義帶泛型方法

在定義帶泛型的方法時,在緊跟可見范圍修飾(例如public)之后的 < >內,指定一個或多個泛型的名字,同時也可以對泛型的取值范圍進行限定,多個泛型之間用,號分隔。

 定義完泛型后,可以在定義位置之后的方法的任意地方使用泛型,就像使用普通的類型一樣。

 例如:

 public <T, S extends T > T testGenericMethodDefine(T t, S s){
       ...
 }

 注意:定義帶泛型的方法,主要目的是為了表達多個參數以及返回值之間的關系。

3、通配符

類型的通配聲明:

可以使用“?”通配字元,并使用extends關鍵字限定持有者的類型。

聲明一個類型時進行限定:

例:

public static void main(String[] args) {
    //使用’?’通配字元,并使用extends關鍵字限定持有者的類型
    MyGenerics <? extends Object, ? extends List <String > > myGenerics = null;    
    //創建滿足類型要求的對象    
    myGenerics = new MyGenerics <String, ArrayList <String > >();    
    //以下是不符合通配要求的因為HashMap沒有實現List    
    //myGenerics = new MyGenerics <String, HashMap >();    
    //給泛型的泛型賦值    
    MyGenerics3 <? extends Object, ? extends List <String > > myGenerics3 = null;    
    myGenerics3 = new MyGenerics3 <Object, List <String > >();    
    //可以設置為null    
    myGenerics3.setMyGenerics(null);
}
MyGenerics3 <?, ? > myGenerics3 = null;

等價于:

MyGenerics3 <? extends Object, ? extends Object > myGenerics5 = null;

4、數組范型

可以使用帶范型參數值的類聲明數組,卻不可有創建數組,不能使用new關鍵字創建T類型的對象,而應該傳遞一個具體的參數類型,如下面的將編譯不通過:

MyGenerics <Integer, String > myGenerics = new MyGenerics <T1, T2 >();

例:

public class MyGenerics2 <T > {
    private T[] param1;    
    public T[] getParam1() {
            return param1;    
    }    
    public void setParam1(T[] param1) {
            this.param1 = param1;    
    }

5、使用泛型的好處:

如果使用了泛型,只要代碼在編譯時沒有出現警告信息,就不會遇到運行時的ClassCastException異常。


查看完整回答
1 反對 回復 2018-07-13
  • 1 回答
  • 0 關注
  • 1078 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號