Most specific testing for method invocations is the same whether an explicit type argument is provided or not. But most specific testing for constructors has different behavior, depending on whether diamond is used or not.
class C<T> {
C(T arg) {}
C(String arg) {}
static <X> C<X> make(X arg) {}
static <X> C<X> make(String arg) {}
}
C.make("hi"); // make(String) is most specific
C.<String>make("hi"); // make(String) is most specific
new C<>("hi"); // C(String) is most specific
new C<String>("hi"); // ERROR: ambiguous
The difference is that, with an explicit class type argument, substitution happens before most-specific testing; while in every other case, the signatures are considered generically.
This may be tolerable. But it's worth considering whether we can unify the behavior of explicitly-parameterized constructors and explicitly-parameterized methods. (Noting that a change to either behavior will be source incompatible.)