Voglio creare un array di Classi, ognuno dei quali rappresenta un tipo disponibile nel sistema che sto costruendo. Tutte le classi coinvolte sono sottoclassi di una superclasse comune. Così mi piacerebbe fare:Come si usano i generici con una serie di Classi?
Class<? extends SuperClass>[] availableTypes = { SubClass1.class, SubClass2.class };
Questo mi dà l'errore:
Cannot create a generic array of Class<? extends SuperClass>.
ottengo lo stesso messaggio se provo a qualificare la creazione della matrice, sul lato destro della inizializzazione:
Class<? extends SuperClass>[] availableTypes = Class<? extends SuperClass>[] { SubClass1.class, SubClass2.class };
posso ottenere il codice per compilare se elimino i generici qualifiche:
Class[] availableTypes = { SubClass1.class, SubClass2.class };
Ma poi ricevo l'avviso generici:
Classe è un tipo non elaborato. I riferimenti al tipo generico Classe devono essere parametrizzati.
Sto provando; Sto provando! :) Inoltre, a questo punto, anche se questo non ha provocato un avvertimento, ho perso un pezzo dell'interfaccia che stavo cercando di definire. Non voglio semplicemente restituire una serie di classi arbitrarie; Voglio restituire una serie di classi che sono tutte sottoclassi di una particolare SuperClass!
Eclipse ha alcuni strumenti piuttosto potenti per capire quali parametri utilizzare per correggere le dichiarazioni generiche, ma in questo caso cade, come tende a fare quando si ha a che fare con Class. La procedura "Inferenti argomenti di tipo generico" che offre non cambia affatto il codice, lasciando l'avviso.
sono stato in grado di ovviare a questo utilizzando una collezione invece:
List<Class<? extends SuperClass>> availableTypes = new List<Class<? extends SuperClass>>();
Ma qual è il modo giusto per fare questo con gli array?
covarianza! Hai detto la parolaccia! –