您好,登錄后才能下訂單哦!
本篇內容介紹了“Java怎么使用通配符實現增強泛型”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
泛型是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> * 修改記錄: * 修改后版本 修改人 修改日期 修改內容 * 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("整型列表的中間數:" + getMiddle(ints)); List<Double> doubles = new ArrayList<Double>(); 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)); } }
泛型
可以用<T>、<B,N>、<T extends User>等進行泛型的聲明。其中<T extends User>的聲明方式限定了T的范圍,T只能為 User的子類。
1.參數類型用在類的創建中,泛型類。
2.參數類型用在接口的創建中,泛型接口。
3.參數類型用在方法的創建中,泛型方法。注意泛型<T>的聲明位置,在方法的修飾符之后,返回值類型之前。
? 類型通配符
通配符的幾種形式:
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怎么使用通配符實現增強泛型”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。