interface Message<T, L> {
}
interface Foo<T> {
void frob(Message<T, Foo<?>> message);
}
class AuxiliaryFoo implements Foo<Integer> {
@Override
public void frob(Message<Integer, Foo<?>> message) { }
}
class MainFoo implements Foo<Object> {
@Override
public void frob(Message<Object, Foo<?>> message) {
new AuxiliaryFoo().frob(new Message<Integer, MainFoo>() {});
}
}
Java编译器告诉我
actual argument < anonymous Message< Integer, MainFoo >> cannot be converted to Message< Integer, Foo< ?>> by method invocation conversion
。为什么?
可以将什么转换为Message >?
最佳答案
您应该使用<? extends Foo<?>>
interface Foo<T> {
void frob(Message<T, ? extends Foo<?>> message);
}
另外,在处理泛型时,需要牢记的一点是PECS规则:Producer Extends, Consumer Super尽管它不直接属于此处,但我不能说它根本不属于此处。