Sono sicuro che a questa domanda è stata data risposta in precedenza, ma non riesco davvero a trovarla.casting Collection <SomeClass> alla raccolta <SomeSuperClass>
Ho una classe java SomeClass
e una classe astratta SomeSuperClass
. SomeClass
estende SomeSuperClass
.
Un altro metodo astratto ha un metodo che restituisce un valore Collection<SomeSuperClass>
. In una classe di implementazione, ho un Collection<SomeClass> myCollection
Capisco che non posso tornare myCollection
, perché Collection<SomeClass>
non eredita da Collection<SomeSuperClass>
. Tuttavia, so che tutto in myCollection
è un SomeSuperClass
perché, dopo tutto, sono gli oggetti SomeClass
che si estendono SomeSuperClass
.
Come posso fare questo lavoro?
I.e. Voglio
public class A
{
private Collection<SomeClass> myCollection;
public Collection<SomeSuperClass> getCollection()
{
return myCollection; //compile error!
}
}
L'unico modo che ho trovato è colata attraverso un tipo non generico e ottenere avvisi incontrollati e quant'altro. Ci deve essere un modo più elegante, però? Ritengo che anche usando Collections.checkedSet()
e gli amici non siano necessari, dal momento che è staticamente certo che la collezione restituita contiene solo oggetti SomeClass
(questo non sarebbe il caso del downcasting invece del upcasting, ma non è quello che sto facendo). Cosa mi manca?
Grazie!
Aha! Grazie :-) Suona come se avessi bisogno di una vista immutabile. – skrebbel
Hmm c'è il supporto della libreria standard per le viste immutabili? :-) – skrebbel
Perché la 'mia soluzione' è possibile? Mi manca qualcosa (vedi la mia risposta qui sotto) –