Quiero crear una matriz de Clases, cada una representando un tipo que está disponible en el sistema que estoy creando. Todas las clases implicadas son subclases de una superclase común. Así que me gustaría hacer:¿Cómo uso los genéricos con una variedad de clases?
Class<? extends SuperClass>[] availableTypes = { SubClass1.class, SubClass2.class };
Esto me da el error:
Cannot create a generic array of Class<? extends SuperClass>.
consigo el mismo mensaje si intento para calificar la creación de la matriz en el lado derecho de la inicialización:
Class<? extends SuperClass>[] availableTypes = Class<? extends SuperClass>[] { SubClass1.class, SubClass2.class };
puedo obtener el código para compilar si elimino los genéricos calificaciones:
Class[] availableTypes = { SubClass1.class, SubClass2.class };
Pero cuando me siento la advertencia genéricos:
clase es un tipo de prima. Las referencias al tipo genérico Clase deben ser parametrizadas.
Lo estoy intentando; ¡Lo estoy intentando! :) Además, en este punto, incluso si esto no provocó una advertencia, pierdo una parte de la interfaz que estaba tratando de definir. No quiero simplemente devolver una variedad de clases arbitrarias; ¡Quiero devolver un conjunto de clases que son subclases de una SuperClass en particular!
Eclipse tiene algunas herramientas bastante poderosas para averiguar qué parámetros usar para corregir las declaraciones de genéricos, pero en este caso se cae, ya que tiende a hacer cuando se trata de clase. El procedimiento "Argumentos de tipo genérico de Infer" que ofrece no cambia el código en absoluto, dejando la advertencia.
pude evitar esto usando una colección en su lugar:
List<Class<? extends SuperClass>> availableTypes = new List<Class<? extends SuperClass>>();
Pero lo que es la forma correcta de hacer esto con matrices?
covarianza! ¡Dijiste la mala palabra! –