В Java невозможно создать массив общего типа напрямую:
Test<String>[] t1 = new Test<String>[10]; // Compile-time error
Однако мы можем сделать это с использованием исходного типа:
Test<String>[] t2 = new Test[10]; // Compile warning "unchecked"
В Java 8 также можно использовать ссылку на конструктор:
interface ArrayCreator<T> {
T create(int n);
}
ArrayCreator<Test<String>[]> ac = Test[]::new; // No warning
Test<String>[] t3 = ac.create(10);
Почему компилятор не отображает предупреждение в последнем случае? Он все еще использует raw-тип для создания массива, правильно?