为什么
class Foo<T> {
}
class Bar<T> {
List<Foo<?>> getFoos() {
return null;
}
}
class Baz {
void baz(Bar bar) {
for (Foo foo : bar.getFoos());
// ^
//error: incompatible types: Object cannot be converted to Foo
}
}
在
时出现编译错误class Foo<T> {
}
// changed Bar<T> to Bar
class Bar {
List<Foo<?>> getFoos() {
return null;
}
}
class Baz {
void baz(Bar bar) {
for (Foo foo : bar.getFoos());
}
}
和
class Foo<T> {
}
class Bar<T> {
List<Foo<?>> getFoos() {
return null;
}
}
class Baz {
// changed Bar to Bar<?>
void baz(Bar<?> bar) {
for (Foo foo : bar.getFoos());
}
}
和
class Foo<T> {
}
class Bar<T> {
List<Foo<?>> getFoos() {
return null;
}
}
class Baz {
void baz(Bar bar) {
// changed Foo to Object
for (Object foo : bar.getFoos());
}
}
编译好。
或者更确切地说,如果父实例是泛型类的原始类型,bar.getFoos()
为什么会返回List<Object>
而不返回List<Foo<?>>
?