I have and interface:
import java.util.Optional;
public interface SomeInterface<T> {
    Optional<Integer> someMethod();
}
Let us call a method of the interface instance:
public class CheckInterfaceInstance {
    public void check(SomeInterface<?> instance) {
        instance.someMethod().get().doubleValue();
    }
}
All is good, no compilation errors.
But if I declare the argument of the check() method without "any type" then we have a compilation error:
public class CheckInterfaceInstance {
    public void check(SomeInterface instance) {   //I removed <?>
        instance.someMethod().get().doubleValue();
    }
}
Compiler treats the type of instance.someMethod().get() as Object. So it complains about not existing method .doubleValue().
As you can see Optional<Integer> someMethod() declaration is not related to the <T> of SomeInterface at all. But the compiler misses the type of Optional.
Why?
 
    