Dato questo codice:Esiste un modo pulito per assegnare la classe di un tipo generico a una variabile?
List<Integer> ints = new ArrayList<Integer>();
// Type mismatch:
// cannot convert from Class<capture#1-of ? extends List> to Class<List<Integer>>
Class<List<Integer>> typeTry1 = ints.getClass();
// Type safety:
// Unchecked cast from Class<capture#2-of ? extends List> to Class<List<Integer>>
Class<List<Integer>> typeTry2 = (Class<List<Integer>>) ints.getClass();
// List is a raw type. References to generic type List<E> should be parameterized
Class<? extends List> typeTry3 = ints.getClass();
C'è un modo per ottenere il Class
di un List<Integer>
senza un errore o un avvertimento? Posso sopprimere gli avvertimenti abbastanza facilmente, ma se Java mi richiede di sopprimere un avviso per questo codice valido, sono molto disappoint.
D'altra parte, se la soppressione degli avvisi è l'unico modo, qual è il più sicuro da sopprimere?
Apparentemente non vi è alcun modo libero di avvertimento a causa della cancellazione. http://stackoverflow.com/questions/339699/java-generics-type-erasure-when-and-what-happens – user845279
Non c'è davvero alcun senso nell'utilizzare un tipo generico concreto per il riferimento all'oggetto Class, poiché tale informazione non è lì nell'oggetto a cui si fa riferimento, quindi nelle mie opinioni 'Classe estende Elenco> 'o' Classe estende la lista >> 'sono i migliori tipi per la variabile. Sono rimasto sorpreso però che non sono riuscito a trovare un cast privo di avvisi per il tipo di target con caratteri jolly ...Tuttavia, poiché gli oggetti di classe sono per lo più utilizzati per la riflessione, si potrebbe andare bene usando 'Classe >', che funziona senza avvisi –