Obtener tipo de objeto en Java
-
Obtener el tipo de objeto usando
getClass()
en Java -
Obtener el tipo de objeto usando
instanceOf
en Java - Obtener el tipo de un objeto de clase creado manualmente en Java
En este artículo, aprenderemos cómo obtener el tipo de objeto en Java. Es útil verificar el tipo de objeto cuando el objeto proviene de una fuente. Es un lugar donde no podemos verificar el tipo de objetos, como desde una API o una clase privada a la que no tenemos acceso.
Obtener el tipo de objeto usando getClass()
en Java
En el primer método, verificamos el tipo de objeto de las clases contenedoras como Integer
y String
. Tenemos dos objetos, var1
y var2
, para comprobar el tipo. Usaremos el método getClass()
de la clase Object
, la clase padre de todos los objetos en Java.
Comprobamos la clase usando la condición if
. Como las clases contenedoras también contienen una clase de campo que devuelve el tipo, podemos comprobar qué tipo coincide con var1
y var2
. A continuación, verificamos ambos objetos con tres tipos.
public class ObjectType {
public static void main(String[] args) {
Object var1 = Integer.valueOf("15");
Object var2 = String.valueOf(var1);
if (var1.getClass() == Integer.class) {
System.out.println("var1 is an Integer");
} else if (var1.getClass() == String.class) {
System.out.println("var1 is a String");
} else if (var1.getClass() == Double.class) {
System.out.println("var1 is a Double");
}
if (var2.getClass() == Integer.class) {
System.out.println("var2 is an Integer");
} else if (var2.getClass() == String.class) {
System.out.println("var2 is a String");
} else if (var2.getClass() == Double.class) {
System.out.println("var2 is a Double");
}
}
}
Producción :
var1 is an Integer
var2 is a String
Obtener el tipo de objeto usando instanceOf
en Java
Otro método para obtener el tipo de objeto en Java es mediante la función instanceOf
; devuelve si la instancia del objeto coincide con la clase dada. En este ejemplo, tenemos los objetos var1
y var2
que se comprueban con estos tres tipos: Integer
, String
y Double
; si se cumple alguna de las condiciones, podemos ejecutar un código diferente.
Como var1
es de tipo Integer
, la condición var1 instanceOf Integer
se convertirá en verdadera, y var2
es Double
, por lo que var2 instanceOf Double
se convertirá en verdadera.
public class ObjectType {
public static void main(String[] args) {
Object var1 = Integer.valueOf("15");
Object var2 = Double.valueOf("10");
if (var1 instanceof Integer) {
System.out.println("var1 is an Integer");
} else if (var1 instanceof String) {
System.out.println("var1 is a String");
} else if (var1 instanceof Double) {
System.out.println("var1 is a Double");
}
if (var2 instanceof Integer) {
System.out.println("var2 is an Integer");
} else if (var2 instanceof String) {
System.out.println("var2 is a String");
} else if (var2 instanceof Double) {
System.out.println("var2 is a Double");
}
}
}
Producción :
var1 is an Integer
var2 is a Double
Obtener el tipo de un objeto de clase creado manualmente en Java
Verificamos los tipos de clases contenedoras, pero en este ejemplo, obtenemos el tipo de tres objetos de tres clases creadas manualmente. Creamos tres clases: ObjectType2
, ObjectType3
y ObjectType4
.
ObjectType3
hereda ObjectType4
y ObjectType2
hereda ObjectType3
. Ahora queremos saber el tipo de objetos de todas estas clases. Tenemos tres objetos, obj
,obj2
y obj3
; usamos los dos métodos que discutimos en los ejemplos anteriores que son getClass()
y instanceOf
.
Sin embargo, existen diferencias entre el tipo de obj2
. La variable obj2
devolvió el tipo ObjectType4
mientras que su clase es ObjectType3
. Sucede porque heredamos la clase ObjectType4
en el ObjectType3
y el instanceOf
comprueba todas las clases y subclases. El obj
devolvió ObjectType3
porque la función getClass()
comprueba sólo la clase directa.
public class ObjectType {
public static void main(String[] args) {
Object obj = new ObjectType2();
Object obj2 = new ObjectType3();
Object obj3 = new ObjectType4();
if (obj.getClass() == ObjectType4.class) {
System.out.println("obj is of type ObjectType4");
} else if (obj.getClass() == ObjectType3.class) {
System.out.println("obj is of type ObjectType3");
} else if (obj.getClass() == ObjectType2.class) {
System.out.println("obj is of type ObjectType2");
}
if (obj2 instanceof ObjectType4) {
System.out.println("obj2 is an instance of ObjectType4");
} else if (obj2 instanceof ObjectType3) {
System.out.println("obj2 is an instance of ObjectType3");
} else if (obj2 instanceof ObjectType2) {
System.out.println("obj2 is an instance of ObjectType2");
}
if (obj3 instanceof ObjectType4) {
System.out.println("obj3 is an instance of ObjectType4");
} else if (obj3 instanceof ObjectType3) {
System.out.println("obj3 is an instance of ObjectType3");
} else if (obj3 instanceof ObjectType2) {
System.out.println("obj3 is an instance of ObjectType2");
}
}
}
class ObjectType2 extends ObjectType3 {
int getAValue3() {
System.out.println(getAValue2());
a = 300;
return a;
}
}
class ObjectType3 extends ObjectType4 {
int getAValue2() {
System.out.println(getAValue1());
a = 200;
return a;
}
}
class ObjectType4 {
int a = 50;
int getAValue1() {
a = 100;
return a;
}
}
Producción :
obj is of type ObjectType2
obj2 is an instance of ObjectType4
obj3 is an instance of ObjectType4
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn