java泛型程序设计——无限定通配符+通配符捕获
生活随笔
收集整理的這篇文章主要介紹了
java泛型程序设计——无限定通配符+通配符捕获
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README
0.1) 本文描述+源代碼均 轉自 core java volume 1, 旨在理解 java泛型程序設計 的 無限定通配符+通配符捕獲 的相關知識;
【1】無限定通配符相關
1.1)無限定通配符: 如Pair< ?>;
- 1.1.1)類型 Pair< ?> 有方法如下所示:
- 1.1.2)Pair< ?> 和 Pair 本質不同在于: 可以用任意 Object對象調用原始的 Pair類的setObject 方法; (也可以調用 setFirst(null));
1.2)為什么要使用 無限定通配符?
- 1.2.1)看個荔枝:下面方法將用來測試一個 pair 是否包含一個 null 引用, 它不需要實際的類型;
- 1.2.2)通過將 hasNulls 轉換成泛型方法, 可以避免使用 通配符類型:
【2】通配符捕獲相關
2.1)出現的問題:
- 2.1.1)通配符不是類型變量, 不能在編寫代碼中使用 ? 作為一種類型, 下面代碼是非法的:
2.2)解決方法: 編寫一個輔助方法 swapHelper, 如下所示:
public static <T> void swapHelper(Pair<T> p) {T t = p.getFirst();p.setFirst(p.getSecond());p.setSecond(t); }Attention) swapHelper 是一個 泛型方法, 而 swap不是, 它具有固定的Pair
2.4)當然, 在這種情況下, 并不是一定要使用通配符。
- 2.4.1)我們已經直接實現了 沒有 通配符的泛型方法 void swap(Pair p) , 看個荔枝:
- 在這里,通配符捕獲機制是不可避免的;
- 2.4.2)通配符捕獲只有在很多限制的情況下才是合法的。
- 編譯器必須能夠確信通配符表達的是 單個、確定的類型;如, ArrayList< Pair< T>> 中的T 永遠不能捕獲 ArrayList< Pair< ?>> 中的通配符;
總結
以上是生活随笔為你收集整理的java泛型程序设计——无限定通配符+通配符捕获的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2台电脑用路由器怎么共享(两台电脑同一路
- 下一篇: cs重狙快捷键(cs狙击技巧)