您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關java泛型常用通配符的示例分析的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
?表示通配符,表示的意思是匹配E或E的子類,具體類型未知。
1.限定通配符
編寫一個類似于ArrayList的動態數據
public class Gys<T> { private final static int default_capacity =10; private int endIndex =0; private Object[] elemts; public Gys() { this.elemts = new Object[default_capacity]; } public void add(T t){ if(elemts.length-1< endIndex){ int newCapcti= default_capacity *2; elemts= Arrays.copyOf(elemts,newCapcti); } elemts[endIndex++]=t; } public void addAll(Gys<T> cs){ for(int i=0;i<cs.size();i++){ add(cs.get(i)); } } public int size(){ return endIndex; } public T get(int i){ if(i< endIndex){ return (T) elemts[i]; } throw new RuntimeException("索引超出界限"); } public static void main(String[] args) { Gys<Number> gys=new Gys<>(); gys.add(25); Gys<Integer> gys2=new Gys<>(); gys2.add(2); gys.addAll(gys2); } }
修改上面的代碼,將addAll參數改成如下
public void addAll(Gys<? extend T> cs){ for(int i=0;i<cs.size();i++){ add(cs.get(i)); } }
這個時候代碼編譯通過了。并且能夠正常的訪問其中的元素。
2.無限定通配符。
改寫上面的addAll方法代碼。
public void addAll(Gys<?> cs){ for(int i=0;i<cs.size();i++){ add(cs.get(i)); } }
上面的代碼編譯不通過。?表示類型不確定,從安全角度考慮無限定的泛型,無法進行寫操作。
但是可以這樣使用。
/** *判斷元素是否存在 */ public boolean isHas(Gys<?> gys,Object elemt){ for(int i=0;i<gys.size();i++){ if(gys.get(i).equals(elemt)){ return true; } } return false; }
除了<? extend E>用法;還有<? super E>的用法,表示類型是E或E的父類。不過多介紹了,用的少。
感謝各位的閱讀!關于“java泛型常用通配符的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。