Java instanceof: So prüfst du Objekttypen korrekt
Mit dem Java-Operator instanceof prüfst du, ob ein Objekt zu einer bestimmten Klasse passt. Der Operator liefert das Ergebnis als booleschen Wert, also „true“ oder „false“. Durch diesen Check lassen sich Fehlermeldungen im Code effektiv vermeiden.
Was ist instanceof in Java?
In Java sind Variablen nicht immer so eindeutig, dass ihr Typ sofort klar ist. Besonders bei großen Projekten in der Programmiersprache können etwa Input-Daten dazu führen, dass eine Variable verschiedene Objekttypen annehmen kann. Hier hilft der instanceof-Operator von world4you weiter. Er stellt sicher, dass die Instanz einer Referenzvariablen tatsächlich mit einer Klasse, Unterklasse oder Schnittstelle übereinstimmt. Passt alles, gibt der Operator „true“ aus. Gibt es keine Übereinstimmung, lautet das Ergebnis „false“.
Bevor du ein unbekanntes Objekt umwandelst, solltest du unbedingt Java instanceof nutzen. So stellst du sicher, dass das Objekt wirklich zur erwarteten Klasse gehört. Ohne diesen Check riskierst du eine ClassCastException. Dieser Fehler tritt auf, wenn ein Objekt fälschlicherweise in eine andere Klasse konvertiert werden soll. Um Verwirrung und Probleme im Code zu vermeiden, ist diese frühzeitige Absicherung der ideale Weg für einen reibungslosen Ablauf.
Funktionsweise und Syntax
Wenn du instanceof in Java einsetzt, vergleicht der Operator eine Referenzvariable mit einer von dir definierten Klasse. Er gibt keine Details zur Beschaffenheit aus, sondern prüft lediglich die Übereinstimmung. Die Syntax ist dabei denkbar einfach gehalten:
(objekt) instanceof (klasse)javaIst (objekt) eine Instanz von (klasse), erhältst du „true“. Falls nicht, erscheint „false“.
Einfaches Beispiel für den instanceof-Operator
Die Funktionsweise von Java instanceof lässt sich am besten an einem kurzen Beispiel zeigen. Zuerst erstellen wir die Klasse „Tier“.
public class Tier {
}javaDanach erweitern („extend“) wir diese um die Unterklasse „Katze“.
public class Katze extends Tier {
}javaMit Java instanceof prüfen wir nun, ob eine Instanz von „Katze“ zur Klasse „Tier“ gehört. Das erledigen wir mit den folgenden Zeilen und nutzen den Java-Befehl System.out.println für die Ausgabe:
public class Tier {}
public class Katze extends Tier {
public static void main(String args []{
Katze Katze = new Katze();
System.out.println(Katze instanceof Tier);
}
}javaDas Ergebnis sieht so aus:
truejavaHierarchien und die Object-Klasse
Das System greift auch bei der Main-Klasse und weiteren Ebenen. Wir erweitern unser Beispiel und nutzen den instanceof-Operator mit der Anweisung if-else. Die Texte nach den Schrägstrichen sind Java Comments. Sie dienen der Erklärung und beeinflussen die Ausgabe nicht.
// Klasse 1
// Oberklasse
public class Tier {
}
// Klasse 2
// Unterklasse
class Katze extends Tier {
}
// Klasse 3
// Main-Klasse
class Main {
public static void main(String[] args)
Katze Katze1 = new Katze();
if (Katze1 instanceof Katze)
System.out.println ("Katze1 ist eine Instanz von Katze");
else
System.out.println ("Katze1 ist KEINE Instanz von Katze");
if (Katze1 instanceof Tier)
System.out.println ("Katze1 ist eine Instanz von Tier");
else
System.out.println ("Katze1 ist KEINE Instanz von Tier");
if (Katze1 instanceof Object)
System.out.println ("Katze1 ist eine Instanz von Object");
else
System.out.println ("Katze1 ist KEINE Instanz von Object);
}
}javaDa „Katze1“ sowohl zur Klasse „Katze“ als auch zur Oberklasse „Tier“ gehört, liefern beide Abfragen „true“. Da die Klasse „java.lang.Object“ an der Spitze der Hierarchie steht, ist „Katze1“ automatisch auch eine Instanz davon. Der Java instanceof Operator gibt bei der Object-Klasse also immer „true“ aus. Die Ausgabe bestätigt das:
Katze1 ist eine Instanz von Katze
Katze1 ist eine Instanz von Tier
Katze1 ist eine Instanz von ObjectjavaUmgang mit Null-Werten
Hat eine Variable den Wert 0 (enthält also kein Objekt), gibt der Java-Operator instanceof automatisch „false“ zurück. Das lässt sich einfach testen:
class Katze {
}
class Main {
public static void main(String[] args)
{
Katze Katze2 = null;
if (Katze2 instanceof Katze)
System.out.println ("Katze1 ist eine Instanz von Katze");
else
System.out.println ("Katze1 ist KEINE Instanz von Katze");
}
}javaDie Ausgabe dazu lautet:
Katze1 ist KEINE Instanz von KatzejavaOberklassen sind keine Instanz ihrer Unterklassen
Objekte von Unterklassen gehören zwar zur Oberklasse, umgekehrt gilt das jedoch nicht. Das folgende Beispiel verdeutlicht diesen Punkt:
class Tier {
}
class Katze extends Tier {
}
class Main {
public static void main(String[] args)
{
Tier Bello = new Tier ();
if (Bello instanceof Katze)
System.out.println ("Bello ist eine Instanz von Katze");
else
System.out.println ("Bello ist KEINE Instanz von Katze");
}
}javaIn diesem Fall sieht die Ausgabe so aus:
Bello ist KEINE Instanz von KatzejavaFehler bei fehlender Verbindung
Besteht keinerlei Verbindung zwischen dem Objekt und der Klasse, führt dies zu einer Fehlermeldung. Wir erstellen dafür die Klasse „Hund“. Diese gehört zwar auch zur Oberklasse „Tier“, hat aber keinen Bezug zur Klasse „Katze“.
class Hund implements Tier {
}
class Main {
public static void main(String[] args)
{
Katze Katze3 = new Katze ();
System.out.println (Katze3 instanceof Hund);
}
}javaDas System meldet nun, dass zwischen „Katze“ und „Hund“ keine Verbindung existiert. Die Meldung wird so angezeigt:
java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Katze and HundjavaIn unserem Guide findest du viele weitere hilfreiche Tutorials rund um Java. Wir vergleichen für dich Java und JavaScript oder schauen uns die Unterschiede zwischen Java und Python an. Auch zu Java Bitwise Operators bieten wir dir den passenden Leitfaden für dein Projekt.
58ae44c97ddd65c04c28258d57ac2e42 341cbc51f31aa6f9652128aaf175d3f6