首頁 > Java > java教程 > 如何使用通配符強化Java的泛型效能

如何使用通配符強化Java的泛型效能

王林
發布: 2023-04-23 08:04:20
轉載
990 人瀏覽過

    使用通配符增強泛型

    1.題目

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

    實作:在泛型方法中使用通配符

    2.解題思維

    建立一個類別:WildcardsTest。

    建立一個方法getMiddle()用於獲得給定清單的中間值。

    在泛型中,使用「?」作為通配符,通配​​符的使用與普通的型別參數類似,如通配符可以利用extends關鍵字來設定取值的上限。如

    extends Number>

    #表示Byte,Double,Float,Integer都適合這個型別參數。

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

    super Number>

    w意思是型別參數是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 class="brush:php;toolbar:false">
     * 修改记录:
     * 修改后版本	        修改人		修改日期			修改内容
     * 2022/5/10.1	    xiaoxuzhu		2022/5/10		    Create
     * 
    登入後複製
    * @date 2022/5/10 */ public class WildcardsTest { public static Object getMiddle(List list) { return list.get(list.size() / 2); } public static void main(String[] args) { List ints = new ArrayList(); ints.add(1); ints.add(2); ints.add(3); System.out.print("整型列表的元素:"); System.out.println(Arrays.toString(ints.toArray())); System.out.println("整型列表的中间数:" + getMiddle(ints)); List doubles = new ArrayList(); doubles.add(1.1); doubles.add(2.2); doubles.add(3.3); System.out.print("浮点列表的元素:"); System.out.println(Arrays.toString(doubles.toArray())); System.out.println("浮点列表的中间数:" + getMiddle(doubles)); } }

    如何使用通配符強化Java的泛型效能

    #知識點補充

    ##泛型

    可用等進行泛型的宣告。其中的宣告方式限定了T的範圍,T只能為 User的子類別。

    1.參數型別用在類別的建立中,泛型類別。

    2.參數類型用在介面的建立中,泛型介面。

    3.參數型別用在方法的建立中,泛型方法。注意泛型的宣告位置,在方法的修飾符之後,傳回值類型之前。

    ? 類型通配符

    通配符的幾種形式:

    1.無限定通配符,

    2.上限萬用字元,。表示參數類型只能是User的子類別。

    3.下限萬用字元,。表示參數類型只能是User的父類別。

    public class P<T> {
      private T t;
      public T getT(){
        return t;
      }
    
      //通配符
      //设置指定类型的范围,超过范围就会报错
      //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);
      }
    }
    登入後複製
    泛型的聲明表明,在類別、介面、方法的建立中,要使用一個未知的資料類型。它可以是Integer類型,也可以是String類型。就把它的類型定義成 T 、S 或是N等等。

    在實例化的時候,就必須宣告T具體是一個什麼型別。

    在定義泛型物件的使用方法時,還不知道T是什麼類型,它可能是String類型,也可能是Integer類型。如果,把T定義成一個確定的泛型資料型別,參數就只能是這種資料型別。此時,就用到了通配符來取代確定的泛型資料型別。

    使用泛型、通配符提高了程式碼的複用性。

    把一個物件分為宣告、使用兩部分的話。泛型著重於類型的聲明上程式碼重複使用,而通配符則著重於使用上的程式碼重複使用。泛型用於定義內部資料類型的不確定性,通配符則用於定義使用的物件類型不確定性。

    以上是如何使用通配符強化Java的泛型效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板