java – 带有extends和super作为参数的无界通配符

前端之家收集整理的这篇文章主要介绍了java – 带有extends和super作为参数的无界通配符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

请帮我解释为什么我不能调用testSuper()方法?有编译错误

The method testSuper(Group

但testExtends()方法OK.但是,它看起来一样.

class AClass
最佳答案
电话之间有区别.

在编译的调用中,

instGrA.testExtends(instGrB);

你传递一个组< BClass< String>>一个期待一个组<?的方法扩展AClass<?>>.匹配,因为BClass< String>是AClass<?>>的子类型. – BClass是AClass的子类,String是?的子类型.

但是,在不编译的调用中,

instGrB.testSuper(instGrA);

你传递一个组< AClass< String>>一个期待一个组<?的方法超级BClass<?>>.这是不匹配的,因为虽然AClass是BClass的超类,但AClass< String>不是BClass<?>的超类型.

testExtends和testSuper参数中的通配符应该归咎于此.因为您在实例中将AClass和BClass分配给T,所以可以使用它们.如果我们在Group中更改这些方法的声明以使用T,我可以编译它:

public void testExtends(Group

猜你在找的Java相关文章