I have problem with understanding how Java wildcard works in one particular case. Let's say I have class which represents generic response
public class MyResponse<T> {
    private final int httpCode;
    private final String message;
    private final T data;
}
and resolver for that:
public class ResponseResolver {
    public void resolve(Either<AppError, MyResponse<?>> responseToResolve) {
        //some logic 
    }
    public void resolveOption(Option<MyResponse<?>> responseToResolve) {
        //some logic 
    }
}
and service where response is resolved with resolver
public class FooService {
    private final ResponseResolver responseResolver;
    public FooService(ResponseResolver responseResolver) {
        this.responseResolver = responseResolver;
    }
    public void resolveFoo() {
        Either<AppError, MyResponse<Foo>> either = Option.of(new MyResponse<>(200, "message", new Foo())).toEither(AppError.ERROR);
        responseResolver.resolve(either);
    }
    public void resolveOptionFoo() {
        MyResponse<Foo> foo = new MyResponse<>(200, "message", new Foo());
        responseResolver.resolveOption(Option.of(foo));
    }
}
I do not understand why resolveOption method which is called in resolveFooOption is a proper way but in method with Either compiler complies that required type is Either<AppError, MyResponse<?> but provided Either<AppError, MyResponse<Foo>. Can anybody explain me why second case is invalid?
