具體運用解釋如下:
在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的值,一旦初始化不可更改,單可以更改它...