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>() {});
    }
}
The Java compiler tells me that actual argument < anonymous Message< Integer, MainFoo >> cannot be converted to Message< Integer, Foo< ?>> by method invocation conversion.
Why?
And what can be converted to Message< Integer, Foo< ?>> ?
 
     
     
    