The quote indicates that there is a generic constructor in your class, which declares it's own type parameter. This is similar to how you create a generic method. The type parameter for the constructor is inferred from the argument you are passing while instantiating the class.
Here is a simple version of a class that matches that invocation:
class MyClass<T> {
<S> MyClass(S arg) {
System.out.println(arg);
}
}
Now when you instantiate your class as in your code, the type parameter T
is inferred as Integer
, and type parameter S
in constructor is inferred as String
, from the argument you passed.
As for the diamond operator, from Java 7 onwards, you don't need to give the type arguments on while creating an instance of a generic class if you already are assigning a reference to a reference. The type argument will be inferred from the one used with the reference type, here Integer
.