Ho un metodo che restituisce una raccolta di una classe di base:C'è un modo per forzare il tipo di ritorno di Arrays.asList
import java.util.*;
class Base { }
class Derived extends Base { }
Collection<Base> getCollection()
{
return Arrays.asList(new Derived(),
new Derived());
}
Questo non riesce a compilare, come il tipo di ritorno di Arrays.asList
(List<Derived>
) fa non corrisponde al tipo restituito del metodo (Collection<Base>
). Capisco perché ciò accade: poiché i tipi generici sono diversi, le due classi non sono correlate per ereditarietà.
Ci sono molti modi per correggere l'errore del compilatore cambiando il tipo di ritorno del metodo per non usare Arrays.asList per lanciare uno degli oggetti derivati su Base.
C'è un modo per dire al compilatore di usare un tipo diverso ma compatibile quando risolve il tipo generico per la chiamata Arrays.asList? (Continuo a cercare di utilizzare questo modello e in esecuzione in questo problema, quindi se c'è un modo per farlo funzionare, mi piacerebbe saperlo.)
ho pensato che si potrebbe fare qualcosa di simile
Collection<Base> getCollection()
{
return Arrays.asList<Base>(new Derived(),
new Derived());
}
Quando provo a compilarlo (java 6), il compilatore si lamenta che si aspetta un ')' alla virgola.
Array. asList –