Qual é o propósito dos argumentos de tipo na chamada do construtor após o novo?

Na especificação Java (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9), new tem o seguinte formato:

ClassInstanceCreationExpression ::=
| new TypeArguments_opt TypeDeclSpecifier TypeArgumentsOrDiamond_opt
    ( ArgumentListopt ) ClassBodyopt
| Primary . new TypeArguments_opt Identifier TypeArgumentsOrDiamond_opt
    ( ArgumentListopt ) ClassBodyopt

Qual é o propósito da primeira lista de argumentos do tipo opcional após o novo? Eu não fui capaz de encontrá-lo da minha leitura da seção 15.9 (todas as referências à lista de argumentos de tipo parecem se referir à lista após o tipo / identificador). Testar os bits aleatórios no compilador Java padrão produz resultados confusos:

public class Foo<T> { }
// ...
Foo<Integer> t1 = new <Integer> Foo<Integer>();  // works
Foo<Integer> t2 = new <Integer> Foo();           // works -- unchecked warning missing the type arg after Foo
Foo<Integer> t3 = new <Boolean> Foo<Integer>();  // works
Foo<Integer> t4 = new <Float, Boolean> Foo<Integer>();  // works
Foo<Integer> t5 = new <NotDefined> Foo<Integer>();  // fails -- NotDefined is undefined

Nestes exemplos simples, não parece que a primeira lista de parâmetros faça algo significativo, embora analise e verifique a validade de seus argumentos.

questionAnswers(2)

yourAnswerToTheQuestion