В спецификации Java (http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.9) новый имеет следующую форму:
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
На простых примерах, похоже, что этот первый список параметров не делает ничего значимого, хотя он анализирует и проверяет правильность своих аргументов.