Hay dos soluciones que no requieren pasar en el objeto de la clase. En ambos supongo que, dado que es una variable privada, usted es la única persona que le agrega cosas, y el mundo exterior no lo ve.
Una es simplemente usar una matriz de Objeto simple Object[]
. La desventaja es que perderá los beneficios de los genéricos y tendrá que lanzar cosas que salen de él, lo que hace que el código sea más feo. Pero ya que eres la única persona que pone cosas en él, entonces el reparto siempre debe estar seguro. El exterior no necesita saber qué está pasando.
Las otras opciones son como un truco. Crea un Object[]
y luego lo "lanza" al T[]
. Técnicamente esto es ilegal, porque Object[]
y T[]
son tipos de tiempo de ejecución diferentes y el primero no se puede convertir a este último. Pero siempre que no pase la matriz fuera de la clase (por ejemplo, la devuelva o algo así), entonces no causará ningún problema, ya que T[]
se borrará a Object[]
de todos modos, y no se realizará ningún lanzamiento. Luego puede obtener los beneficios de los genéricos en su clase para una codificación más fácil, pero debe tener mucho cuidado de no pasar esa matriz a nadie que realmente espere un T[]
, porque no lo es.
Estoy de acuerdo - Las listas son generalmente una mejor alternativa por muchas razones. De hecho, algunas personas sugerirán que las matrices se deben considerar como una parte obsoleta del lenguaje en Java 5+. No digo que soy uno de ellos ... pero encontrarás esa opinión. –
Las matrices siguen siendo válidas para tipos primitivos. Pero para los tipos de referencia es solo una optimización inapropiada casi todo el tiempo. –