Java之泛型

泛型

泛型就是指參數(shù)化類型,用符號(hào)標(biāo)記是實(shí)際類型的占位符,是從JDK1.5出現(xiàn)的新特性。
泛型可分為:

  • 泛型類
  • 泛型方法
  • 泛型接口

有了泛型以后,可以省去不必要的類型轉(zhuǎn)換,還提高了類型的安全性。

例:

public class Generator <T>{
    private T target;

    public T getTarget() {
        return target;
    }
    public Generator(T target) {
        this.target = target;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return "target = " + target + ", target type is \"" +  target.getClass().getName()+ "\"";
    }
}

class Generator2{
    //不用泛型的版本    只能使用Object類型
    private Object target;
    public Generator2(Object target) {
        this.target = target;
    }
    public Object getTarget() {
        return target;
    }
    public String toString() {
        // TODO Auto-generated method stub
        return "target = " + target + ", target type is \"" +  target.getClass().getName()+ "\"";
    }
}

class Test{
    public static void main(String[] args) {
        /*
        Generator<Integer> intElem = new Generator<Integer>(88);
        System.out.println(intElem);
        Generator<String> strElem = new Generator<String>("hello");
        System.out.println(strElem);
        intElement = strElement; 錯(cuò)誤
        輸出: 
            target = 88, target type is "java.lang.Integer"
            target = hello, target type is "java.lang.String"
        */
        Generator2 intElem = new Generator2(88);
        int intElement = (Integer) intElem.getTarget();//需要強(qiáng)轉(zhuǎn)
        System.out.println(intElem);
        Generator2 StrElem = new Generator2("hello");
        intElem = StrElem;//正確
        System.out.println(intElem);
        /*結(jié)果:
         target = 88, target type is "java.lang.Integer"
         target = hello, target type is "java.lang.String"
         */
    }
}
//泛型的作用還是很明顯的

泛型類

泛型類定義的格式:

 class 類名<類型占位符>{}

注意:

  • 泛型類對象創(chuàng)建格式: 類名<類型名> = new 類名<類型名>();
  • 泛型類確定類型是在創(chuàng)建對象的時(shí)候;
  • 對象創(chuàng)建指定類型時(shí)不能是基本數(shù)據(jù)類型(int byte short long
    char float double boolean ),如果是基本數(shù)據(jù)類型,必須使
    用其封裝類型(JDK1.5之后支持自動(dòng)裝箱和自動(dòng)拆箱)。
  • 類型參數(shù)可以有多個(gè)用逗號(hào)隔開就好。
  • 如果一個(gè)類已經(jīng)自定義了泛型,使用該類創(chuàng)建對象的時(shí)候如果沒有指> > 定泛型的具體數(shù)據(jù)類型,那么默認(rèn)為Object類型。
  • 靜態(tài)的函數(shù)不能使用類上自定義的泛型,如果靜態(tài)函數(shù)需要使用,必須要在函數(shù)上自定義泛型。

泛型方法

泛型方法定義格式:修飾符 <聲明自定義的泛型>返回值類型 函數(shù)名 (自定義的泛型 變量名..)

注意:

  • 泛型方法中 的自定義泛型的具體數(shù)據(jù)類型是在調(diào)用該函數(shù)的時(shí)候傳入
    實(shí)參時(shí)確定的。
  • 自定義泛型所用的標(biāo)識(shí)符只要符合標(biāo)識(shí)符的命名規(guī)則即可(泛型類也一
    樣),一般都習(xí)慣使用一個(gè)大寫字母表示。

泛型接口

泛型接口定義方式:interface 接口名<聲明自定義的泛型>{}

注意:

  • 泛型接口上的自定義泛型是在實(shí)現(xiàn)該接口的時(shí)候指定具體數(shù)據(jù)類型
    的。
  • 如果實(shí)現(xiàn)接口的時(shí)候沒有指定接口上 的自定義泛型的具體數(shù)據(jù)類型,
    那么默認(rèn)為Object數(shù)據(jù)類型。
  • 如果需要在創(chuàng)建接口實(shí)現(xiàn)類對象的時(shí)候才指定接口上自定義泛型,那
    么需要以下格式:class<T> 類名 implements 接口<T>

泛型界限

有時(shí)候需要指定類型參數(shù)的范圍,比如說只能指定數(shù)字,可以用<T extends Number>

例:
public class AverageNum {

    public static <T extends Number>void getAverage(T... nums){
    //JDK1.5新特性 可變參數(shù)
        double sum = 0;
        for (T t : nums){
            sum=sum+t.doubleValue();
        }
        System.out.println("平均值是 : " + (sum/nums.length));
    }
    public static void main(String[] args) {
        getAverage(1, 0, 13, 3);
        //輸出: 平均值是 : 4.25
        getAverage(2.3, 4.5, 5);
        //輸出:平均值是 : 3.9333333333333336
        //        getAverage("s", "d", "a"); 錯(cuò)誤
    }
}

使用通配符

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 國家電網(wǎng)公司企業(yè)標(biāo)準(zhǔn)(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報(bào)批稿:20170802 前言: 排版 ...
    庭說閱讀 12,389評論 6 13
  • object 變量可指向任何類的實(shí)例,這讓你能夠創(chuàng)建可對任何數(shù)據(jù)類型進(jìn)程處理的類。然而,這種方法存在幾個(gè)嚴(yán)重的問題...
    CarlDonitz閱讀 1,020評論 0 5
  • java之泛型(2) 接上一篇使用通配符(?) 通配符在上一篇中沒有詳細(xì)講通配符的使用,蘿卜剛開始學(xué)這兒的時(shí)候覺得...
    羅伯特胡蘿卜皮閱讀 514評論 0 0
  • 互聯(lián)網(wǎng)金融指利用互聯(lián)網(wǎng)技術(shù)實(shí)現(xiàn)資金融通、支付、投資和信息中介服務(wù)的新型金融業(yè)務(wù)模式,中國的互聯(lián)網(wǎng)金融早在90年代就...
    生柴有道閱讀 379評論 0 2
  • “水逆!!”這是昨天到今天白天最想說的話。 因?yàn)楹桨嘀禉C(jī)時(shí)間是凌晨,我第一次乘坐最后一班2號(hào)線東延段,卻發(fā)現(xiàn)最后一...
    大胃愛吃牛腩粉閱讀 664評論 3 10

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