class<T>和 class<?>類型 有什么區(qū)別

平時看java源代碼的時候,如果碰到泛型的話,我想? T K V E這些是經(jīng)常出現(xiàn)的,但是有時想不起來代表什么意思,今天整理下:

? 表示不確定的java類型。

T? 表示java類型。

K V 分別代表java鍵值中的KeyValue。

E 代表Element。

Object跟這些東西代表的java類型有啥區(qū)別呢?

Object是所有類的根類,是具體的一個類,使用的時候可能是需要類型強制轉(zhuǎn)換的,但是用T ?等這些的話,在實際用之前類型就已經(jīng)確定了,不需要強制轉(zhuǎn)換。

追問:

也就是說,這個方法能知道返回的是哪種類型(父類),就用T行了?如果完全不知道的就用?用T的得到的對象就不需要類型轉(zhuǎn)換了,而用?的就必需用強轉(zhuǎn)了!

追答:

第一種是固定的一種泛型,第二種是只要是Object類的子類都可以,換言之,任何類都可以,因為Object是所有類的根基類

固定的泛型指類型是固定的,比如:Interge,String. 就是

<? extends Collection> 這里?代表一個未知的類型,

但是,這個未知的類型實際上是Collection的一個子類,Collection是這個通配符的上限.

舉個例子

class Test { }

其中,限定了構(gòu)造此類實例的時候T是一個確定類型(具體類型),這個類型實現(xiàn)了Collection接口,

但是實現(xiàn) Collection接口的類很多很多,如果針對每一種都要寫出具體的子類類型,那也太麻煩了,干脆還不如用

Object通用一下。

其中,?是一個未知類型,是一個通配符泛型,這個類型是實現(xiàn)Collection接口即可。

_________________________上面講的是什么鬼,當(dāng)你知道引入通配符泛型的由來之后(下面代碼由java1234.com提供)_________________________________________________________________________________________

The method take(Animal) in the type Test is not applicable for the arguments (Demo)

The method take(Animal) in the type Test is not applicable for the arguments (Demo)

The method take(Animal) in the type Test is not applicable for the arguments (Demo)

當(dāng)引入泛型之后,遇到這種情況,參數(shù)怎么寫都不適合,總有2個方法不適用,為了給泛型類寫一個通用的方法,這時候就需要引入了 ?通配符的概念。

publicclassDemo {privateT ob;publicT getOb() {returnob;

}publicvoidsetOb(T ob) {this.ob =ob;

}publicDemo(T ob) {super();this.ob =ob;

}publicvoidprint(){

System.out.println("T的類型是:"+ob.getClass().getName());

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,625評論 18 399
  • 開發(fā)人員在使用泛型的時候,很容易根據(jù)自己的直覺而犯一些錯誤。比如一個方法如果接收List作為形式參數(shù),那么如果嘗試...
    時待吾閱讀 1,122評論 0 3
  • 前言 人生苦多,快來 Kotlin ,快速學(xué)習(xí)Kotlin! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,669評論 9 118
  • 1.加載文檔事件 $(document)ready();$.holdReady(bool)【jQuery的工具函數(shù)...
    大步邁閱讀 328評論 0 1
  • 最近被要求寫一篇長長的自我介紹,其中,名字要叫成《我是一個***的人》。我努力回顧自己活過的這36年,一時不知用哪...
    倪淑清_0449閱讀 587評論 1 2

友情鏈接更多精彩內(nèi)容