泛型類與泛型接口

一、使用泛型的好處

  • 可以使用多種數(shù)據(jù)類型,來執(zhí)行相同的代碼
    使用泛型前,如不同類型需要進行方法重載
public class NonGeneric {
    public int addInt(int x,int y){
        return x+y;
    }
    public float addFloat(float x,float y){
        return x+y;
    }
    //double
    public static void main(String[] args) {
        NonGeneric nonGeneric = new NonGeneric();
        System.out.println(nonGeneric.addInt(1,2));
        System.out.println(nonGeneric.addFloat(1f,2f));
    }
}

如果還需要double類型的求和,需要重新在重載一個輸入是double類型的add方法。其實邏輯都是一樣的,只是輸入?yún)?shù)類型不一樣而已,正好在java中數(shù)值類型有個公共的父類:Number

public class NonGeneric {
    public int addInt(int x,int y){
        return x+y;
    }
    public float addFloat(float x,float y){
        return x+y;
    }
    //使用泛型方法
    public <T extends Number> double add(T t1, T t2) {
        double allsum;
        allsum = t1.doubleValue() + t2.doubleValue();
        return allsum;
    }
    public static void main(String[] args) {
        NonGeneric nonGeneric = new NonGeneric();
        System.out.println(nonGeneric.add(1,2));
        System.out.println(nonGeneric.add(1f,2f));
        System.out.println(nonGeneric.add(1d,2d));
        System.out.println(nonGeneric.add(1L,2L));
    }
  • 使用泛型以后,可以指定數(shù)據(jù)類型,而不需要強制類型轉(zhuǎn)換,以及如果插入錯誤類型,在編譯階段就可以發(fā)現(xiàn)
    以下是未使用泛型,List元素默認(rèn)類型為Object,需要強制類型轉(zhuǎn)換
public class NonGeneric4 {
    public NonGeneric4() {
    }

    public static void main(String[] args) {
        List list = new ArrayList();
        list.add("mark");
        list.add("OK");
        list.add(100);

        for(int i = 0; i < list.size(); ++i) {
            String name = (String)list.get(i);
            System.out.println("name:" + name);
        }

    }
}

運行會拋出異常

name:mark
name:OK
Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
    at cn.enjoyedu.generic.needgeneric.NonGeneric4.main(NonGeneric4.java:19)

使用泛型后

public class NonGeneric4 {
    public static void main(String[] args) {
//        List list = new ArrayList();
        List<String> list = new ArrayList();
        list.add("mark");
        list.add("OK");
//        list.add(100);

        for (int i = 0; i < list.size(); i++) {
            String name = (String) list.get(i); // 1
            System.out.println("name:" + name);
        }
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容