泛型限定符 extend和super

2021-10-03 00:06:40 字數 1591 閱讀 3739

具體運用解釋如下:

在add方法中,只能加入物件的子類以其本身,而在使用extends表示泛型時,由於不知道其下界,所以不能使用add方法

在get方法中,只能加入物件的父類和其本身,而在使用super表示泛型時,由於不知道其上界,所以不能使用get方法

class

super

class

self

extends

super

class

sonextends

self

void

test()

{ list<

?extends

self

> a =

newarraylist

<

>()

;//引數型別上界是self

a.add(

newson()

);//error 不能放入任何型別,因為編譯器只知道a中應該放入self的某個子類,但具體放哪種子類它並不知道,因此,除了null以外,不能放入任何型別

a.add(

newself()

);//error

a.add(

newsuper()

);//error

a.add(null)

;//error

self s1 = a.

get(0)

;//返回型別是確定的self類,因為<? extends t> 只能用於方法返回,告訴編譯器此返參的型別的最小繼承邊界為t,t和t的父類都能接收,但是入參型別無法確定,只能接受null的傳入

super s2 = a.

get(0)

;//self型別可以用super接收

son s3 = a.

get(0)

;//error:子類不能接收父型別引數

//--------------------------------------

list<

?super self> b =

newarraylist

<

>()

;//引數型別下界是self

b.add(

newson()

);//ok 只能放入t型別,且滿足t型別的超類至少是self,換句話說,就是只能放入self的子型別

b.add(

newself()

);//ok 本身型別也可以

b.add(

newsuper()

);//error超類不可以

b.add(null)

;//ok

object o1 = b.

get(0)

;//返回型別是未知的, 因為<? super t>只能用於限定方法入參,告訴編譯器入參只能是t或其子型別,而返參只能用object類接收

son o2 = b.

get(0)

;//error

self o3 = b.

get(0)

;//error

super o4 = b.

get(0)

;//error

java學習筆記 02 泛型限定符

parentclass childclass 其實很好理解,不需要專門去記它。如字面所言,萬用字元?代表要匹配的型別,則 extends parentclass 表示要匹配的型別繼承自parentclass類,而 super childclass 表示要匹配的型別是childclass的父類。限定萬...

說明符和限定符

有些被稱為儲存說明符或cv 限定符的c 關鍵字提供了其他有關儲存的資訊。儲存說明符 1 auto 在c 中不再是說明符 2 register 3 static 4 extern 5 thread local c 11新增的 6 mutable 下面就是cv限定符 1 const 2 volatile...

指標和const限定符

const int p 1,表示p指向乙個整型變數,並且該變數為const的。2,可以更改p的值,不可以更改它所指向物件的值。3,它可以指向非const型別的int變數 int const p 1,表示p指向乙個整型變數,該變數為非const的 2,不可以更改p的值,一旦初始化不可更改,單可以更改它...