List、List 、List、List 、List

題目源自 牛客

classA{}
class B extends A{}
class C extends A{}
class D extedns B{}

which is true --答案 ACD
A:The type LIst<A> is assignable to List √ //List 相當於 List<?>范圍比List<A>大
B:The type List<B> is assignable to List<A> × //兩個點之間不能賦值,除非是相同的兩個點
C: The type List<Object> is assignable to List<?> √//List<?>是最大范圍, 而List<Object>只是其中的一個點,在最大范圍內
D: The type List<D> is assignable to List<?extendsB> √//D是B的子類,所以D的范圍比B小 

如果尖括號里是一個類,例如 List<A>, List<B>, List<C>,List<Object>就是普通的泛型
如果尖括號里是<?extends >,例如 List<? extends A>代表小於等於A的范圍(extends 繼承,extends A 繼承自A,就是范圍小於等於A)
如果尖括號里是<? super>,例如List<? Super A> 代表范圍大於等於A
如果尖括號里是<?> 則代表全部范圍
List<?> 和 List 范圍相同
尖括號里,所有點賦值都是錯的,除非兩個點相同eg: List<A> = List<B>,將B賦值給A是錯的, 但是 List<? extends A> = List<B> 是對的
尖括號里,小范圍賦值給大范圍 ,對
尖括號里,大范圍賦值給小范圍,錯
尖括號里,相同的點可以互相賦值


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。