泛型是JAVA重要的特性,使用泛型編程,可以使代碼復用率提高。
實作:在泛型方法中使用通配符
建立一個類別:WildcardsTest。
建立一個方法getMiddle()用於獲得給定清單的中間值。
在泛型中,使用「?」作為通配符,通配符的使用與普通的型別參數類似,如通配符可以利用extends關鍵字來設定取值的上限。如
extends Number>
#表示Byte,Double,Float,Integer都適合這個型別參數。
還有,有上限,也有下限,如
super Number>
w意思是型別參數是Number類別的父類,如Object.
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
##泛型
可用? 類型通配符
通配符的幾種形式: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中文網其他相關文章!