一、通配符概念
其實.上很多技術點都是為了解決某一問題而出現的,那么我們在學習的過程中可以先提出問題,然后在使用我們的技術去解決。
DEMO:觀察問題
以上代碼可以正常執行,但是如果泛型類中的類型改變之后發現了方法中的參數的泛型也需要改變,這就說明了fun方法依賴Person的泛型,這也是耦合度較高的一種體現,此時我們可以在方法的參數中使用通配符代替具體的泛型。通配符使用“?”即可。
DEMO:通配符解決問題
此時使用了“?”在方法中替代具體的泛型類型,之后不管Person中的泛型如何改變,fun 方法都不需要改動,其實通配符還有兩個子通配符。一個是通配符上限,一個是通配符下限。
二、通配符的上限
1、通配符上限: ? extends. 上限 類型。
DEMO:在方法中指定通配符的上限
方法方法定義了上限之后:方法只能接受上限類型以及.上限類型的子類類型。除了方法的通配符可以定義上限之外類的泛型也可以定義上限。
DEMO:類的泛型上限
類使用了泛型.上限之后實例化子類的時候指定的泛型的具體類型只能是泛型上限本類類型以及泛型上限類型的子類類型。
三、方法通配符的下限
定義方式: ? super‘ 下 限類型
DEMO:通配符下限類型
使用了通配符下限之后:方法只能接受下限類型以及下限類型的父類類型作為泛型具體類型。類泛型有下限嗎?類的泛型是沒有下限的。
總結:
1、使用通配符“?”解決了方法對泛型類的依賴
2、通配符的.上限“? extends.上限類型”, 方法只能接受上限類型以及上限類型的子類類型,泛型類也可以設置上限。
3、通配符下限“?super 下限類型”,方法只能接受下限本類類型以及下限的父類類型,泛型類不可以設置下限。
有完整的Java初級,高級對應的學習路線和資料!專注於java開發。分享java基礎、原理性知識、JavaWeb實戰、spring全家桶、設計模式、分布式及面試資料、開源項目,助力開發者成長!
歡迎關注微信公眾號:碼邦主