Comprobar si un objeto pertenece a una clase en Java [duplicate]
⏰ 3 minutos de lectura
¿Hay una manera fácil de verificar que un objeto pertenece a una clase dada? Por ejemplo, podría hacer
if(a.getClass() = (new MyClass()).getClass())
{
//do something
}
pero esto requiere instanciar un nuevo objeto sobre la marcha cada vez, solo para descartarlo. ¿Hay una mejor manera de verificar que “a” pertenece a la clase “MyClass”?
dhm
los instanceof La palabra clave, como se describe en las otras respuestas, suele ser lo que desea. Manten eso en mente instanceof regresará true para superclases también.
Si desea ver si un objeto es una instancia directa de una clase, puede comparar la clase. Puede obtener el objeto de clase de una instancia a través de getClass(). Y puede acceder estáticamente a una clase específica a través de ClassName.class.
Así por ejemplo:
if (a.getClass() == X.class) {
// do something
}
En el ejemplo anterior, la condición es verdadera si a es una instancia de Xpero no si a es una instancia de una subclase de X.
En comparación:
if (a instanceof X) {
// do something
}
En el instanceof ejemplo, la condición es verdadera si a es una instancia de Xo si a es una instancia de un subclase de X.
La mayor parte del tiempo, instanceof es correcto.
gdejohn
Si alguna vez necesita hacer esto dinámicamente, puede usar lo siguiente:
Puede obtener una instancia de java.lang.Class llamando al método de instancia Object::getClass en cualquier objeto (devuelve el Class del cual ese objeto es una instancia), o puede usar literales de clase (por ejemplo, String.class, List.class, int[].class). También hay otras formas, a través de la API de reflexión (que Class en sí mismo es el punto de entrada para).
o mejor aún, use IsAssignableFrom(Class)
– Chii
28 de noviembre de 2010 a las 6:05
@Chii Pero entonces tienes que llamar getClass en a de nuevo, que es lo que el revés intentaba evitar.
– gdejohn
28 de noviembre de 2010 a las 9:13
no, todo lo que necesita son referencias a las clases que desea comparar: a.getClass().isAssignableFrom(MyClass.class) , o al revés.
– Chii
29 de noviembre de 2010 a las 8:29
@Chii Eso suponiendo que sabe con qué clase quiere comparar antes de tiempo. Mi respuesta fue por hacerlo dinámicamente.
– gdejohn
29 de noviembre de 2010 a las 11:36
¿Funciona esto también para objetos heredados? Me gusta si la clase Sub deriva de Super y en un método, la firma es method(Super super) entonces si evalúo super isinstanceof Subfuncionará si un objeto de tipo Sub se pasa como parámetro a este método?
Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Configurar y más información