这两个通用陈述有什么区别?它们似乎做同样的事情,它似乎在编译时没有任何影响,因为我可以互换地使用它们而没有错误。
class Foo {
}
class FooBar extends Foo {
}
interface FooService {
Set<? extends Foo> getFooObject();
<T extends Foo> Set<T> getFooObjectAlternative();
}
class FooServiceImpl implements FooService {
@Override
Set<FooBar> getFooObject() {
// works
}
@Override
Set<FooBar> getFooObjectAlternative() {
// works but you get a warning
}
@Override
Set<Integer> getFooObjectAlternative() {
// works for some reason!
}
}