Estoy seguro de que esto ha sido respondido antes, pero realmente no lo puedo encontrar.colección de fundición <SomeClass> para Colección <SomeSuperClass>
Tengo una clase java SomeClass
y una clase abstracta SomeSuperClass
. SomeClass
extiende SomeSuperClass
.
Otro método abstracto tiene un método que devuelve Collection<SomeSuperClass>
. En una clase de implementación, tengo un Collection<SomeClass> myCollection
entiendo que no puedo acaba de regresar myCollection
, porque Collection<SomeClass>
no hereda de Collection<SomeSuperClass>
. Sin embargo, sé que todo en myCollection
es SomeSuperClass
porque después de todo, son SomeClass
objetos que extienden SomeSuperClass
.
¿Cómo puedo hacer esto?
I.e. Quiero
public class A
{
private Collection<SomeClass> myCollection;
public Collection<SomeSuperClass> getCollection()
{
return myCollection; //compile error!
}
}
La única forma que he encontrado es la fundición a través de un tipo no genérico y conseguir advertencias y todo eso sin marcar. Sin embargo, debe haber una manera más elegante? Siento que también usar Collections.checkedSet()
y amigos no es necesario, ya que es estáticamente cierto que la colección devuelta solo contiene objetos SomeClass
(este no sería el caso cuando downcasting en lugar de upcasting, pero eso no es lo que estoy haciendo). ¿Qué me estoy perdiendo?
Gracias!
Aha! Gracias :-) Parece que necesito una vista inmutable. – skrebbel
Hmm ¿hay compatibilidad de biblioteca estándar para vistas inmutables? :-) – skrebbel
¿Por qué es posible 'mi solución'? Me estoy perdiendo algo (mira mi respuesta a continuación) –