Error: creación de matriz genérica

No entiendo el error de la creación de matriz genérica.
Primero probé lo siguiente:

public PCB[] getAll() { PCB[] res = new PCB[list.size()]; for (int i = 0; i < res.length; i++) { res[i] = list.get(i); } list.clear(); return res; } 

Entonces traté de hacer esto:

 PCB[] res = new PCB[100]; 

Debo estar perdiendo algo porque parece correcto. Intenté buscarlo, realmente lo hice. Y nada está haciendo clic.

Mi pregunta es: ¿Qué puedo hacer para arreglar esto?

el error es:

 .\Queue.java:26: generic array creation PCB[] res = new PCB[200]; ^ Note: U:\Senior Year\CS451- file uses unchecked or unsafe operations. Note: Recompile with -Xlint:unchecked for details. 1 error 

Herramienta completada con el código de salida 1

No puede crear matrices con un tipo de componente genérico.

Cree una matriz de un tipo explícito, como Object[] , en su lugar. Luego puede convertir esto en PCB[] si lo desea, pero no lo recomiendo en la mayoría de los casos.

 PCB[] res = (PCB[]) new Object[list.size()]; /* Not type-safe. */ 

Si desea seguridad tipo, use una colección como java.util.List lugar de una matriz.

Por cierto, si la list ya es java.util.List , debe usar uno de sus métodos toArray() , en lugar de duplicarlos en su código. Sin embargo, esto no soluciona el problema de la seguridad del tipo.

Además del camino sugerido en el “posible duplicado”, la otra forma principal de evitar este problema es que la matriz (o, al menos, una plantilla de uno) la suministre, que con suerte conocerá el tipo concreto y puede por lo tanto, crea de forma segura la matriz.

Esta es la forma en que se implementan métodos como ArrayList.toArray(T[]) . Te sugiero que eches un vistazo a ese método de inspiración. Mejor aún, probablemente deberías estar usando ese método de todos modos, como otros han notado.

Lo siguiente le dará una matriz del tipo que desee mientras preserva la seguridad del tipo.

 PCB[] getAll(Class arrayType) { PCB[] res = arrayType.cast(java.lang.reflect.Array.newInstance(arrayType.getComponentType(), list.size())); for (int i = 0; i < res.length; i++) { res[i] = list.get(i); } list.clear(); return res; } 

Cómo funciona esto se explica en profundidad en mi respuesta a la pregunta que Kirk Woll relacionó como un duplicado.