亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

基于java中泛型的總結分析

2019-11-26 16:08:30
字體:
來源:轉載
供稿:網友

要我直接說出泛型是個what我還真講不出來,這里先由一道問題引入:

  定義一個坐標點類,要求能保存各種類型的數據,如:整形,浮點型,和字符串類型

既然變量類型起先不確定,那么很容易想到就是用所有類型的父類,也就是Object類來代替

不廢話了,用代碼來體現

實例1:用Object來實現不確定的數據類型輸入

復制代碼 代碼如下:

//這是定義的坐標點類
class Point {
    private Object x;
    private Object y;

    //用Object來表示不確定的類型
    public Point(Object x, Object y) {
        this.setX(x);
        this.setY(y);
    }
    public void setX(Object x) {
        this.x = x;
    }
    public Object getX() {
        return x;
    }
    public void setY(Object y) {
        this.y = y;
    }
    public Object getY() {
        return y;
    }

}

//測試類
public class Demo {
    public static void main(String[] args) {
        System.out.println("用浮點數表示坐標: ");
        Point p = new Point(12.23,23.21);
        //這里把Object類轉為Double類,然后自動拆箱,下面兩種一樣
        System.out.println("X的坐標 " + (Double)p.getX());
        System.out.println("Y的坐標 " + (Double)p.getY());
        System.out.println();

        System.out.println("用整數表示坐標: ");
        Point p2 = new Point(12, 23);
        System.out.println("X的坐標 " + (Integer)p2.getX());
        System.out.println("Y的坐標 " + (Integer)p2.getY());
        System.out.println();

        System.out.println("用字符串表示坐標: ");
        Point p3 = new Point("北緯29度", "東經113度");
        System.out.println("X的坐標 " + (String)p3.getX());
        System.out.println("Y的坐標 " + (String)p3.getY());
    }
}

這樣就可以代入不同類型數據了,但你別忘了,此時的數據還是Object型,也就是所有類型的父類

你必須清醒的明白自己傳入的是什么類型,然后將其做向下轉型處理才能使用

雖然這樣做滿足了需求,不過卻隱含了一個不安全因素,為什么說是隱含呢?

比如我們用new Point(12.23,"北緯29度")來構造一個Point對象

然后都用(Double)將其向下轉型,會產生什么結果?

沒錯,編譯會通過,但是一旦運行則會發生類型轉換異常

要避免類轉換異常也很簡單,把Object聲明換成固定類型聲明(如:String x,String y)即可,這樣編譯時就會報錯

然后你就可以尋找出錯的地方進行修改

不過如此一來,我們就滿足不了需求了

為了達到不存在安全隱患和代入各種數據類型的目的,那些牛人們在JDK1.5當中引入了泛型這一概念

我們來看看如何用泛型改寫上面的代碼

實例2:泛型類

復制代碼 代碼如下:

class Point<T> {
    //這里用T來表示不確定的類型
    private T x;
    private T y;
    public Point(T x, T y) {
        this.setX(x);
        this.setY(y);
    }
    public T getX() {
        return x;
    }
    public void setX(T x) {
        this.x = x;
    }
    public T getY() {
        return y;
    }
    public void setY(T y) {
        this.y = y;
    }
}

public class Demo {
    public static void main(String[] args) {
        System.out.println("用浮點數表示坐標: ");
        //用泛型改寫后,使用數據無需再做向下轉型處理
        Point<Double> p = new Point<Double>(12.23,23.21);
        System.out.println("X的坐標 " + p.getX());
        System.out.println("Y的坐標 " + p.getY());
        System.out.println();

        System.out.println("用整數表示坐標: ");
        Point<Integer> p2 = new Point<Integer>(12, 23);
        System.out.println("X的坐標 " + p2.getX());
        System.out.println("Y的坐標 " + p2.getY());
        System.out.println();

        System.out.println("用字符串表示坐標: ");
        Point<String> p3 = new Point<String>("北緯29度", "東經113度");
        System.out.println("X的坐標 " + p3.getX());
        System.out.println("Y的坐標 " + p3.getY());
    }
}

使用泛型過后,可減少安全隱患的存在

如果此時我們刻意傳入不一樣的數據類型:

Point<Double> p = new Point<Double>("北緯29度",12.22);

那么,在編譯時就會報錯

雖然定義了泛型,但如果你在構造函數中并未使用泛型機制的話,那么它便會把數據當作Object處理

這樣做的目的主要是為了兼容JDK1.4以前的老代碼,如

Point p = new Point(22.11,23.21);

最終運行結果是一樣的,但在編譯時卻會提示警告信息

 

實例3:泛型方法

由上面的例子可以看到,一旦在構造方法中明確對象類型,那么整個類中就將使用同一種類型

最典型的例子是運用在集合框架里面,如:ArrayList<Integer> al = new ArrayList<Integer>();

此時,al中操作的所有對象類型便都是Integer了

可是,有時候我們并不希望固定死操作的對象,而是希望更夠更加靈活的使用泛型技術

這個時候就可以嘗試泛型方法

復制代碼 代碼如下:

//類名后面不再定義泛型
class Print {
    //在方法中定義泛型
    public <T> void print(T t) {
        System.out.println(t);
    }

    public <E> void show(E e) {
        System.out.println(e);
    }
}

public class Demo {
    public static void main(String[] args) {
        Print p = new Print();
        p.print(12);
        p.print("hello");
        p.show(new Integer(33));
        p.show(23);
    }
}

其實這樣一來,與在方法中使用Object對象已經沒有什么太大區別了

何況,JDK1.5之后加入了自動拆裝箱功能,省去了需要向下轉型的麻煩

 

實例4:泛型接口

復制代碼 代碼如下:

//定義一個泛型接口
interface Inter<T>
{
    public void print(T t);
}

//實現方式一:
class InterDemo1 implements Inter<String> {
    public void print(String t) {
        System.out.println("print: " + t);
    }
}

//實現方式二:
class InterDemo2<T> implements Inter<T> {
    public void print(T t) {
        System.out.println("print: " + t);
    }
}

class Demo {
    public static void main(String[] args) {
        InterDemo1 id1 = new InterDemo1();
        id1.print("hello");
        InterDemo2<Integer> id2 = new InterDemo2<Integer>();
        id2.print(new Integer(23));
    }
}

實現泛型接口的方式有兩種,一種是在實現的時候指定泛型類型

另一種是依然使用泛型,在構造的時候確定泛型類型

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品一区二区三区| 亚洲成人激情小说| 精品国产1区2区| 日韩av在线不卡| 精品欧美一区二区三区| www.欧美视频| 亚洲韩国欧洲国产日产av| 欧美激情第一页xxx| 亚洲欧美国产精品va在线观看| 伊人伊成久久人综合网站| 91爱爱小视频k| 精品国产依人香蕉在线精品| 奇米影视亚洲狠狠色| 欧美极品少妇xxxxⅹ免费视频| 久久精品国产视频| 成人精品在线视频| 国产视频精品va久久久久久| 在线国产精品播放| 日韩电影大片中文字幕| 欧美日韩一区二区免费在线观看| 亚洲桃花岛网站| 欧美性猛交xxxx黑人| 国产又爽又黄的激情精品视频| 久久成人综合视频| 色婷婷综合成人av| www欧美xxxx| 欧美激情videos| 国产精品爽爽爽| 国产精品国内视频| 热re91久久精品国99热蜜臀| 日本欧美黄网站| 成人中文字幕+乱码+中文字幕| 国产日韩在线播放| 国产91ⅴ在线精品免费观看| 久久久久久久国产精品| 亚洲欧美国产日韩天堂区| 亚洲精品wwwww| 亚洲成年人在线播放| 国内精品久久久久伊人av| 亚洲乱码av中文一区二区| 夜色77av精品影院| 国产精品美女久久| 欧美激情xxxxx| 91美女片黄在线观| 色999日韩欧美国产| 国产精品视频免费观看www| 精品久久香蕉国产线看观看gif| 在线播放日韩专区| 欧美电影免费观看高清完整| 国产日产欧美a一级在线| 日本精品va在线观看| 国产精品久久国产精品99gif| 日本欧美国产在线| 国产精品免费一区二区三区都可以| 日韩中文字幕国产精品| 成人乱人伦精品视频在线观看| 2019中文字幕在线| 久久久久久久久久国产| 日韩电影中文字幕在线观看| 在线丨暗呦小u女国产精品| 成人a在线观看| 色爱精品视频一区| 亚洲一区美女视频在线观看免费| 国产最新精品视频| 成人激情视频在线播放| 国产精品丝袜视频| 欧美老少配视频| 国产成人av网| 91精品国产综合久久久久久久久| 精品女同一区二区三区在线播放| 日韩国产一区三区| 日韩在线欧美在线国产在线| 岛国视频午夜一区免费在线观看| 91成人在线观看国产| 亚洲人在线观看| 国产日韩欧美另类| 欧美大片网站在线观看| 91沈先生作品| 国产精品揄拍500视频| 国产日韩av高清| 国产精品av网站| 日韩av色综合| 国内精品久久久久久中文字幕| 日本成人激情视频| 久久久久久久91| 国产精品6699| 国模私拍一区二区三区| 国产精品黄视频| 国产精品成人观看视频国产奇米| 日韩在线视频观看| 97久久超碰福利国产精品…| 8x海外华人永久免费日韩内陆视频| 亚洲国产成人91精品| 高清日韩电视剧大全免费播放在线观看| 91精品国产91久久久久久不卡| 欧美床上激情在线观看| 亚洲国产欧美久久| 在线视频日本亚洲性| 91成人在线观看国产| 在线视频国产日韩| 欧美一级电影在线| 亚洲国产成人精品女人久久久| 久久免费视频网站| 疯狂做受xxxx高潮欧美日本| 亚洲成人激情小说| 国产精品入口夜色视频大尺度| 91chinesevideo永久地址| 久久精品国产久精国产一老狼| 国产女人18毛片水18精品| 正在播放欧美视频| 欧美成人精品三级在线观看| 中文字幕亚洲欧美日韩高清| 久久久精品一区二区三区| 久久精品免费电影| 亚洲色图欧美制服丝袜另类第一页| 91香蕉嫩草神马影院在线观看| 欧美激情影音先锋| 亚洲国产天堂久久综合网| 青草热久免费精品视频| 久久久久国产视频| 欧美激情a∨在线视频播放| 亚洲色图综合网| 亚洲美女精品久久| 日韩电影大全免费观看2023年上| 亚洲一区亚洲二区亚洲三区| 国产精品自拍偷拍视频| 91精品国产免费久久久久久| 91久久久在线| 亚洲xxxxx| 久久久视频免费观看| 中文字幕精品视频| 69久久夜色精品国产69| 日韩在线观看av| 精品国产一区二区三区久久久狼| 亚洲自拍在线观看| 亚洲国产精品视频在线观看| 俺也去精品视频在线观看| 91精品视频在线看| 青青草原一区二区| 国产不卡精品视男人的天堂| 欧美视频在线视频| 亚洲一区国产精品| 日韩av综合网| 国内精品一区二区三区四区| 自拍偷拍免费精品| 亚洲精品免费网站| 一二美女精品欧洲| 亚洲精品一区在线观看香蕉| 少妇av一区二区三区| 国模极品一区二区三区| 日本一本a高清免费不卡| 热久久99这里有精品| 日韩亚洲精品视频| 精品久久久一区二区| 亚洲一区亚洲二区亚洲三区| 秋霞av国产精品一区| 亚洲精品视频网上网址在线观看| 国产ts人妖一区二区三区| 亚洲欧美综合区自拍另类| 欧美大尺度电影在线观看| 欧美日韩福利视频| 成人黄色免费在线观看| 国产精品美女视频网站| 日韩av免费观影|