Durante l'utilizzo di Spring ApplicationContext e il suo metodo getBeansOfType
ho riscontrato un problema con tipi generici. Ciò dimostra il problema:Come ottenere la conversione da List <SomeParamType> a List <SomeParamType <?>>
class Test
{
List<Generator<?>> allGenerators =
new ArrayList(getBeansOfType(Generator.class).values()); // Raw type warning
// for new ArrayList()
<T> Map<String, T> getBeansOfType(Class<T> klass) {
return emptyMap();
}
}
interface Generator<R> {}
Recupero tutti i bean di un tipo parametrico dal contenitore. Voglio averli come Generator<?>
e utilizzare la logica personalizzata per trasmettere in sicurezza al parametro di tipo appropriato basato su una proprietà su ciascuna istanza Generator
.
Il mio problema è che non riesco a trovare alcun modo per assegnare a allGenerators
senza avvisi di sicurezza del tipo, anche se a livello concettuale non mi sto impegnando in alcun parametro di tipo non controllato. Voglio solo convertire un tipo non elaborato in un tipo jolly.
C'è qualche idioma che non richiede @SuppressWarnings
per arrivarci?
Ma questo dà chiaramente un avviso di "tipo grezzo" su 'Generatore g'. Puoi disattivare questo avviso in Eclipse, ma non è quello che sto puntando. –
@MarkoTopolnik sembra ok se uso 'Generator >' come tipo di 'g' (almeno, il codice viene compilato e non ricevo alcun avviso) – Raffaele
Devi abilitare -Xlint: deselezionato nelle impostazioni del compilatore in IntelliJ per visualizzare l'avviso o compilarlo manualmente con questa impostazione abilitata. –