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.

¿Cómo puedo verificar con qué tipo estoy tratando?

Simplificando: Estoy buscando un equivalente en Haxe para el “instanceof” de Java.

Este es mi problema específico:

Tengo una clase “Tile” que contiene un campo “content” de tipo “Unit” y una función “get_content()” que devuelve el objeto almacenado actualmente. “Unit” es una interfaz que se implementa en 3 clases: “Player”, “Monster” y “Item”. Además, tengo monstruos más específicos (como “Dragon” o “Beast”) y los he definido en su propia clase. Cada uno de ellos extiende la clase “Monster”.

Ahora quiero ejecutar un código diferente dependiendo del tipo de objeto devuelto por “tile.get_content()”. Por ejemplo, si es cualquier objeto que hereda de la clase “Monster”, llamar a “myFunction1()”, y si es algo que extiende la clase “Item”, llamar a “myFunction2()”.

¿Cómo puedo lograr este comportamiento?

Gracias de antemano.

Edit:

Encontré que “if (Type.typeof(tile.get_content()) == Monster)” parece ser la forma de hacerlo, ¿pero esto devuelve true también para los tipos que heredan de la clase “Monster” o solo para objetos de la clase genérica “Monster”?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para lograr el comportamiento deseado, puedes utilizar la API Type proporcionada por Haxe para verificar el tipo del objeto devuelto por tile.get_content().

    Específicamente, puedes utilizar el método Type.getClass() para obtener la clase del objeto, y luego utilizar el método Type.getSuperClass() para verificar si la clase es una subclase de otra clase.

    Aquí tienes un ejemplo de código que demuestra este enfoque:

    var content = tile.get_content(); // obtener el objeto a verificar
    
    if (Type.getClass(content) == Monster) {
        // si la clase de content es Monster
        myFunction1();
    } else if (Type.getSuperClass(Type.getClass(content)) == Item) {
        // si la clase de content extiende Item
        myFunction2();
    } else {
        // manejar otros casos según sea necesario
    }
    

    Ten en cuenta que Type.getClass() devuelve la clase real del objeto, mientras que Type.getSuperClass() devuelve la clase padre de la clase dada. Por lo tanto, para verificar si una clase es una subclase de otra clase, debes llamar a Type.getSuperClass() en la clase del objeto que deseas verificar.

    En el ejemplo anterior, Type.getClass(content) obtiene la clase del objeto devuelto por tile.get_content(), y Type.getSuperClass(Type.getClass(content)) == Item verifica si la clase es una subclase de Item. Esto devolverá verdadero para cualquier clase que extienda Item, incluyendo clases como Dragon y Beast que también extienden la clase Monster.

Comments are closed.