Ottieni il tipo di oggetto in Java
-
Ottieni il tipo di oggetto usando
getClass()
in Java -
Ottieni il tipo di oggetto usando
instanceOf
in Java - Ottieni il tipo di un oggetto classe creato manualmente in Java
In questo articolo impareremo come ottenere il tipo di oggetto in Java. È utile controllare il tipo di oggetto quando l’oggetto proviene da un’origine. È un luogo in cui non possiamo verificare il tipo di oggetti, ad esempio da un’API o da una classe privata a cui non abbiamo accesso.
Ottieni il tipo di oggetto usando getClass()
in Java
Nel primo metodo, controlliamo il tipo di Object delle classi wrapper come Integer
e String
. Abbiamo due oggetti, var1
e var2
, per controllare il tipo. Useremo il metodo getClass()
della classe Object
, la classe genitore di tutti gli oggetti in Java.
Controlliamo la classe usando la condizione if
. Poiché le classi wrapper contengono anche una classe di campo che restituisce il tipo, possiamo verificare quale tipo corrisponde a var1
e var2
. Di seguito, controlliamo entrambi gli oggetti con tre tipi.
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");
}
}
}
Produzione:
var1 is an Integer
var2 is a String
Ottieni il tipo di oggetto usando instanceOf
in Java
Un altro metodo per ottenere il tipo di oggetto in Java è utilizzare la funzione instanceOf
; restituisce se l’istanza dell’oggetto corrisponde alla classe data. In questo esempio abbiamo gli oggetti var1
e var2
che vengono controllati con questi tre tipi: Integer
, String
e Double
; se una qualsiasi delle condizioni soddisfa, possiamo eseguire un codice diverso.
Poiché var1
è di tipo Integer
, la condizione var1 instanceOf Integer
diventerà vera e var2
è Double
, quindi var2 instanceOf Double
diventerà vera.
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");
}
}
}
Produzione:
var1 is an Integer
var2 is a Double
Ottieni il tipo di un oggetto classe creato manualmente in Java
Abbiamo controllato i tipi di classi wrapper, ma in questo esempio otteniamo il tipo di tre oggetti di tre classi create manualmente. Creiamo tre classi: ObjectType2
, ObjectType3
e ObjectType4
.
ObjectType3
eredita ObjectType4
e ObjectType2
eredita ObjectType3
. Ora vogliamo conoscere il tipo di oggetti di tutte queste classi. Abbiamo tre oggetti, obj
, obj2
e obj3
; usiamo entrambi i metodi discussi negli esempi precedenti che sono getClass()
e instanceOf
.
Tuttavia, ci sono differenze tra il tipo di obj2
. La variabile obj2
ha restituito il tipo ObjectType4
mentre la sua classe è ObjectType3
. Succede perché ereditiamo la classe ObjectType4
in ObjectType3
e instanceOf
controlla tutte le classi e sottoclassi. L’obj
ha restituito ObjectType3
perché la funzione getClass()
controlla solo la classe diretta.
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;
}
}
Produzione:
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