请帮我解释为什么我不能调用testSuper()方法?有编译错误:
The method testSuper(Group super BClass>>) in the type 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 extends T> value){}
public void testSuper(Group super T> value){}