通配符类型


通配符类型:就是允许类型参数变化的泛型。

其中,Pair(raw)为原始类型(即Pair),Pair<?>为泛型类型。Employee为父类,Manager为子类。

Pair<? extends Employee>表示任何泛型Pair类型,它的参数类型是Employee的子类,如Pair<Manager>.

Pair<? super Manager>表示Manager所有的超类型。如Pair<Employee>、Pair<Object>

Pair<? extends Employee>和Pair<? super Manager>都表示一个范围,通配符类型的灵活性就体现在这里。

Pai<?>和Pair在表示范围上都表示最大,但是在方法的调用上有所不同。

Pair<?>有如下方法:

? getFirst()

void setFirst()

getFirst()的返回值只能赋给一个Object。setFirst方法不能被调用,甚至不能用Object调用。Pair<?>和Pair本质的不同在于:可以用任意Object对象调用原始Pair类的setObject方法。



带有超类限定的通配符可以向泛型对象写入,带有子类型限定的通配符可以从泛型对象读取。



以下是来自牛客网的一道题目:

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

Which four statements are true ?

链接:https://www.nowcoder.com/questionTerminal/9bc2d446173147b3b28b31568a6c4706
来源:牛客网

A.The type List<A>is assignable to List.
B.The type List<B>is assignable to List<A>.
C.The type List<Object>is assignable to List<?>.
D.The type List<D>is assignable to List<?extends B>.
E.The type List<?extends A>is assignable to List<A>.
F.The type List<Object>is assignable to any List reference.
G.The type List<?extends B>is assignable to List<?extends A>.


正确答案:A C D G


发布了34 篇原创文章 · 获赞 20 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/ChengXuYuanXingCheng/article/details/72791851