tutorial pasos para interfaz grafica espaƱol ejemplos crear contenedores componente java instanceof

java - pasos - swing containers



Ver si dos objetos tienen el mismo tipo. (5)

Digamos que tengo una clase A, y que B, C, D se derivan de A.
Si quiero saber cuál es el tipo de un objeto al que se hace referencia, puedo declarar:

// pseudo-code if(obj instanceof B) < is B> else if(obj instanceof C) < is C> else <is D>

Esto porque estoy seguro de que las clases derivadas de A son solo B, C y D.
Pero, ¿qué pasa si solo quiero comprobar que dos referencias apuntan al mismo tipo de objeto?
Así que algo como:

if(obj1 instanceof obj2) <do something>

Pero, por supuesto, la sintaxis es incorrecta. ¿Cómo comprobar esto sin mil si no?


Algo como esto:

if(classA.getClass().getName().equals(classB.getClass().getName())) <do something>


Podrías hacerlo

if (obj1.getClass() == obj2.getClass()) { ... }


Quieres decir algo como

obj1.getClass().equals(obj2.getClass())

Esto debería devolver verdadero solo si obj1 y obj2 son de la misma clase específica.

Pero esto no funcionará si estás comparando A con B extends A Si desea una igualdad que devuelva verdadera, incluso si uno es un subtipo de otro, tendrá que escribir una función de comparación más potente. Creo que puedes hacerlo haciendo un bucle con getSuperClass() para subir al árbol jerárquico.

Creo que una solución simple también puede ser A.getClass().isAssignableFrom(B.getClass()) , suponiendo que B extends A


Ya que B, C y D son subclases de A, y quieres hacer algo con estas clases, no usaría el operador instanceOf . Esta es solo útil para cuando no hay otra manera.

Podría anular mejor los súper métodos y / o las variables, de modo que pueda usar todos los objetos de la misma manera; con fuerza, harán algo diferente (por ejemplo, imprimir su propio tipo).


instanceof necesita apuntar hacia una clase, no a otro objeto. Para verificar que dos objetos provienen del mismo tipo de objeto, haga algo con lo siguiente:

if((obj1 instanceof ClassName) && (obj2 instanceof ClassName)) { do whatever }