声明局部变量时,通配符没有多大意义,但是当为方法声明参数时,通配符确实很重要。
假设您有一个方法:
int countLegs ( List< ? extends Animal > animals ){ int retVal = 0; for ( Animal cur : animals ) { retVal += cur.countLegs( ); } return retVal;}使用此签名,您可以执行以下操作:
List<Dog> dogs = ...;countLegs( dogs );List<Cat> cats = ...;countLegs( cats );List<Animal> zoo = ...;countLegs( zoo );
但是,如果您这样声明
countLegs:
int countLegs ( List< Animal > animals )
然后,在前面的示例中,仅
countLegs( zoo )会编译,因为只有该调用具有正确的类型。



