Какова цель аргументов типа в вызове конструктора после new?

В спецификации Java (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9), new имеет следующую форму:

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

Какова цель первого необязательного списка аргументов типа после нового? Я не смог найти его в моем прочтении раздела 15.9 (кажется, что все ссылки на список аргументов типа ссылаются на список после типа / идентификатора). Тестирование случайных битов на стандартном компиляторе Java дает неверные результаты:

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

На этих простых примерах не похоже, что этот первый список параметров делает что-то значимое, хотя он анализирует и проверяет правильность своих аргументов.

Ответы на вопрос(2)

Ваш ответ на вопрос