You may be over thinking it.
A plain Resolver has a resolve(Object) method.
A Resolver<
String> has a resolve(String) method.
You can assign (with a warning) a Resolver<String> to a Resolver variable, and once you've done so, it's just as if you've assigned a String to an Object variable: the compiler treats the thing as if the variable's type is all that matters.
So in the first case, you're calling resolve(Object) on an Object, and it works.
In the second case, you're calling resolve(String) on an Object, and it doesn't.