首頁  >  文章  >  Java  >  如何使用通配符強化Java的泛型效能

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

王林
王林轉載
2023-04-23 08:04:20946瀏覽

    使用通配符增強泛型

    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 extends Number> 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.上限萬用字元, extends User>。表示參數類型只能是User的子類別。

    3.下限萬用字元, super User>。表示參數類型只能是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刪除