關(guān)于Object類,泛型與 ? 的區(qū)別

先講解一下概念吧。

Object類,是在java中所有的類的父類。還包括了一些基本方法:
equal、toString、wait、hashCode,感興趣的可以看我之前的源碼分析。

T 這是一個泛型的意思。在類的前面修飾,表示這是一個泛型類。

? 這是一個類型通配符。

List<Object> list=new ArrayList<>();  
List<String> list=new ArrayList<>();
List<T> list=new ArrayList<>();

這是一組聲明。

第一個聲明,我們在加入list中的對象的時候,可以加入任何對象,因為Object是所有對象的子類,這里是內(nèi)部符合依賴倒轉(zhuǎn)原則,任何父類的對象所代表的參數(shù),都可以用子類代替。

第二個,這個在聲明的時候就已經(jīng)限定死了,只能加入String類。

第三個表達(dá)式,在聲明的時候,設(shè)置成泛型,在第一次加入對象的時候,才會確認(rèn)里面必須存放什么類型的對象。如果是String,就只能add(String s).

再來講講?這個通配符。
對比T泛型,就需要先區(qū)別一下兩種場景:

1.聲明一個泛型類或者泛型方法
2.使用一個泛型類或者泛型方法

類型參數(shù)<T>主要用于第一種,而無界通配符<?>主要用于第二種,使用泛型類或泛型方法。

<T>聲明泛型類的類型參數(shù)
class Box<T>{
private T item1;
private T item2;
}
聲明泛型類不能用無界通配符<?>
//編譯報錯
class Box<?>{
private ? item1;
private ? item2;
}

有界通配符

<? extends XXX> 表示該參數(shù)必須繼承XXX

<? super XXX> 表示給參數(shù)為XXX的父對象

?著作權(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)容

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