溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Java怎么使用通配符實(shí)現(xiàn)增強(qiáng)泛型

發(fā)布時間:2022-08-26 15:38:33 來源:億速云 閱讀:120 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“Java怎么使用通配符實(shí)現(xiàn)增強(qiáng)泛型”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

    使用通配符增強(qiáng)泛型

    1.題目

    泛型是JAVA重要的特性,使用泛型編程,可以使代碼復(fù)用率提高。

    實(shí)現(xiàn):在泛型方法中使用通配符

    2.解題思路

    創(chuàng)建一個類:WildcardsTest。

    創(chuàng)建一個方法getMiddle()用于獲得給定列表的中間值。

    在泛型中,使用“?”作為通配符,通配符的使用與普通的類型參數(shù)類似,如通配符可以利用extends關(guān)鍵字來設(shè)置取值的上限。如

    <? extends Number>

    表示Byte,Double,F(xiàn)loat,Integer都適合這個類型參數(shù)。

    還有,有上限,也有下限,如

    <? super Number>

    w含義是類型參數(shù)是Number類的父類,如Object.

    3.代碼詳解

    package com.xiaoxuzhu;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    /**
     * Description:
     *
     * @author xiaoxuzhu
     * @version 1.0
     *
     * <pre>
     * 修改記錄:
     * 修改后版本	        修改人		修改日期			修改內(nèi)容
     * 2022/5/10.1	    xiaoxuzhu		2022/5/10		    Create
     * </pre>
     * @date 2022/5/10
     */
    
    public class WildcardsTest {
        public static Object getMiddle(List<? extends Number> list) {
            return list.get(list.size() / 2);
        }
    
        public static void main(String[] args) {
            List<Integer> ints = new ArrayList<Integer>();
            ints.add(1);
            ints.add(2);
            ints.add(3);
            System.out.print("整型列表的元素:");
            System.out.println(Arrays.toString(ints.toArray()));
            System.out.println("整型列表的中間數(shù):" + getMiddle(ints));
            List<Double> doubles = new ArrayList<Double>();
            doubles.add(1.1);
            doubles.add(2.2);
            doubles.add(3.3);
            System.out.print("浮點(diǎn)列表的元素:");
            System.out.println(Arrays.toString(doubles.toArray()));
            System.out.println("浮點(diǎn)列表的中間數(shù):" + getMiddle(doubles));
        }
    }

    Java怎么使用通配符實(shí)現(xiàn)增強(qiáng)泛型

    知識點(diǎn)補(bǔ)充

    泛型

    可以用<T>、<B,N>、<T extends User>等進(jìn)行泛型的聲明。其中<T extends User>的聲明方式限定了T的范圍,T只能為 User的子類。

    1.參數(shù)類型用在類的創(chuàng)建中,泛型類。

    2.參數(shù)類型用在接口的創(chuàng)建中,泛型接口。

    3.參數(shù)類型用在方法的創(chuàng)建中,泛型方法。注意泛型<T>的聲明位置,在方法的修飾符之后,返回值類型之前。

    ? 類型通配符

    通配符的幾種形式:

    1.無限定通配符,<?>。

    2.上限通配符,<? extends User>。表示參數(shù)類型只能是User的子類。

    3.下限通配符,<? super User>。表示參數(shù)類型只能是User的父類。

    public class P<T> {
      private T t;
      public T getT(){
        return t;
      }
    
      //通配符
      //設(shè)置指定類型的范圍,超過范圍就會報錯
      //extends : 指定范圍必須是其(這里是List)子類
      public void set(P<? extends List> list){
        return;
      }
    
      //super : 指定類型必須是其(這里是List)父類
      public void setSuper(P<? super List> list){
        return;
      }
    
      public static void main(String[] args) {
        new P<String>(); //T會被替換成String
        new P<Integer>(); //T會被替換成Integer
        Person<String,List,Double,User> person = new Person<String,List,Double,User>();//T會被替換成String,B會被替換成List...
        person.eat("魚");
      }
    }
    class User<T extends P>{//這里給類的泛型指定范圍,T必須要繼承類P。
    
    }
    //一個類可以同時指定多個泛型
    class Person<T,B,S,N>{
      private T t;
      private B b;
      private S s;
      private N n;
      public void eat(T t){
        this.t = t;
        System.out.println("我正在吃"+this.t);
      }
    }

    泛型的聲明表明,在類、接口、方法的創(chuàng)建中,要使用一個未知的數(shù)據(jù)類型。它可以是Integer類型,也可以是String類型。就把它的類型定義成 T 、S 或者是N等等。

    在實(shí)例化的時候,就必須聲明T具體是一個什么類型。

    在定義泛型對象的使用方法時,還不知道T是什么類型,它可能是String類型,也可能是Integer類型。如果,把T定義成一個確定的泛型數(shù)據(jù)類型,參數(shù)就只能是這種數(shù)據(jù)類型。此時,就用到了通配符代替確定的泛型數(shù)據(jù)類型。

    使用泛型、通配符提高了代碼的復(fù)用性。

    把一個對象分為聲明、使用兩部分的話。泛型側(cè)重于類型的聲明上代碼復(fù)用,通配符則側(cè)重于使用上的代碼復(fù)用。泛型用于定義內(nèi)部數(shù)據(jù)類型的不確定性,通配符則用于定義使用的對象類型不確定性。

    “Java怎么使用通配符實(shí)現(xiàn)增強(qiáng)泛型”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

    向AI問一下細(xì)節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI