es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Establecer la subclase Set como superclase Set en java.

¿Hay alguna manera de convertir Set<Subclass> a Set<Superclase>?

He intentado de estas 3 maneras a continuación. ¿Hay alguna forma mejor o alguna práctica recomendada para esto?


// clase que extiende a la superclase final class MapEntryCustom implements Map.Entry<String,Object> { // todas las implementaciones } // variable para convertirse private Set<MapEntryCustom> entrySet = new HashSet<>(); // 3 formas diferentes de conversión public Set<Entry<String, Object>> getSetMapEntry() { return (Set<Entry<String, Object>>) entrySet; // error no se puede convertir return (Set<? extends Entry<String, Object>>) entrySet; // error no se puede convertir return (Set<Entry<String, Object>>) (Set<? extends Entry<String, Object>>) entrySet; // advertencia de seguridad de tipo }
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible convertir Set<subclase> a Set<superclase> pero con algunas restricciones. Se puede hacer utilizando tipos genéricos comodín. Hay tres maneras en las que podemos castear Set<subclase> a Set<superclase>:

    1. Casting directo: return (Set<superclase>) entrySet; Este método no se recomienda porque puede arrojar una ClassCastException en tiempo de ejecución si el Set contiene algún objeto que no sea del tipo Superclase.
    2. Comodines de límite superior: return (Set<? extends Superclase>) entrySet; Esta es una forma segura de castear, y no arrojará una ClassCastException. Este método permite que el Set contenga cualquier objeto que extienda Superclase.

    3. Doble casting: return (Set<superclase>) (Set<? extends Superclase>) entrySet; Este método es similar al segundo método, pero también proporciona un cast seguro en cuanto al tipo. No arrojará una ClassCastException, y también garantizará que el Set solo contenga objetos del tipo Superclase.

    El método recomendado para castear Set<subclase> a Set<superclase> es utilizando el segundo método con comodines de límite superior.

Comments are closed.