Это не должно было быть ошибкой. Предупреждение достаточно. Если никто не может создать ArrayList<Integer>[]
, нет никакого смысла разрешать тип.
Поскольку javac не делает нам одолжение, мы можем сами создать массив:
@SuppressWarnings("unchecked")
<E> E[] newArray(Class<?> classE, int length)
{
return (E[])java.lang.reflect.Array.newInstance(classE, length);
}
void test()
ArrayList<Integer>[] x;
x = newArray(ArrayList.class, 10);
Ограничение типа не является идеальным, вызывающий должен убедиться, что передан точный класс. Хорошая новость заключается в том, что если передан неправильный класс, сразу возникает ошибка во время выполнения при присваивании результата x
, поэтому быстро провалиться.