更新時間:2020-08-04 16:38:23 來源:動力節點 瀏覽2429次
泛型接口和類
泛型類和接口上面已經演示過了,定義方式類似class A;這樣。需要注意一點,在實現泛型接口時可以選擇傳入泛型實參或者不傳實參,傳入實參時實現類不需要聲明為泛型,實現類中所有使用泛型的地方都要轉為實參。不傳入實參時,實現類也要聲明為泛型。
泛型方法
泛型方法能夠使方法獨立與類而產生變化,Java編程思想一書中有一個指導原則,無論何時,只要能做到,就應該盡量使用泛型方法。也就是說,如果使用泛型方法可以取代將整個類泛型化,那么就應該只使用泛型方法。另外,對于一個static的方法而言,無法訪問泛型類的類型參數,所以,如果static方法需要使用泛型能力,就必須使其成為泛型方法。
看一個簡單例子:
首先上面這個類是普通類,并不是一個泛型類。這個類有一個泛型方法,這個方法可以靜態的也可以是靜態的,我這里選擇用靜態方法。方法get很簡單,就是打印出參數的類型。在定義方法的時候,并不知道要傳入的方法類型,只有在編譯時期根據傳入的參數類型,可以推斷出泛型的實參,例如傳入的1,編譯器可以推斷出泛型參數類型為Integer,傳入“1”,編譯器可以推斷出泛型參數類型為String,傳入1.0編譯器可以推斷出泛型參數類型為Double。這個叫做參數類型推斷。
看下上面代碼執行結果:
代碼的執行結果證明了泛型方法不需要顯式的指明參數類型,可以推斷參數類型。類型推斷只對賦值操作有效,其他時候并不起作用。如果你將一個泛型方法調用的結果(例如New.map())作為參數,傳遞給另一個方法,這時編譯器并不會執行類型推斷。
綜上所述,當使用泛型類時候,必須在創建對象的時候指定類型的參數值,而使用泛型方法的時候,通常不必指明參數類型,因為編譯器會找出具體的類型。
通配符
在定義泛型過程中會經常遇到不同的通配符,例如T,E,K,V,?等,這些其實沒什么區別,但是默認情況下有一些約定:
T表示一個java類型。
E表示元素Element,表示容器中的元素。
K V(key Value)分別代表java鍵值中的Key Value。
?表示不確定的java類型。
通配符一般可以分為無界通配符,上界通配符和下界通配符。
定義方式如下:
但是上界通配符和下屆通配符是具有局限性的。在上圖的list中,上界通配符定義的list只能get數據,且類型為Fruit,add的時候會報錯。下界通配符定義的list只能add數據,get數據返回的只能是object,詳細信息會全部丟失。
以上就是動力節點java培訓機構的小編針對“Java泛型有哪些?怎么用?”的內容進行的回答,希望對大家有所幫助,如有疑問,請在線咨詢,有專業老師隨時為你服務。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習