A Java instanceof operátor segítségével ellenőrizheti, hogy egy objektum egy adott osztályhoz tartozik-e. Az operátor a választ logikai kifejezés formájában adja meg, azaz „igaz” vagy „hamis”. Ha előzetesen ellenőrzi, hogy az objektum és az osztály egyezik-e, elkerülheti a későbbi hibaüzeneteket.

Mi az a instanceof Java-ban?

A Java egyes változóinak jellege nem mindig azonnal nyilvánvaló. Nagy Java-projektekben, ahol számos változó van, például a bemeneti adatok miatt egy változó különböző objektumokként jelenhet meg. Ezért a programozási nyelv instanceof biztosít a felhasználóknak. Ez a Java-operátor biztosítja, hogy a referencia-változó példánya valóban megfeleljen egy osztálynak, alosztálynak vagy interfésznek. Ha van egyezés, az operátor a „true” logikai értéket adja ki. Ha nincs egyezés, a kimenet „false”.

Ismeretlen objektum konvertálásakor fontos a Java instanceof használata, hogy biztosan az objektum a feltételezett osztályhoz tartozzon. Ha ezt a biztonsági ellenőrzést kihagyja, ClassCastException hibaüzenet jelenhet meg. Ez akkor fordul elő, amikor egy objektumot egy másik osztályba kell konvertálni. A hibaüzenet zavaros lehet, és problémákat okozhat, ha a kód különösen hosszú. Ezért a legjobb, ha biztonsági intézkedésként már korán elkezdjük használni a Java instanceof.

Mi a instanceof szintaxisa?

Amikor a Java nyelvben instanceof használja, az operátor összehasonlítja a referencia változót egy adott osztályjal, amelyet szintén a felhasználó határoz meg. Nem tartalmaz semmilyen további információt az objektum vagy az osztály jellegéről. Egyszerűen csak meghatározza, hogy van-e egyezés vagy sem. A szintaxis egyszerű, és így néz ki:

(object) instanceof (class)
java

Ha (object) a (class) példánya, akkor „true” jelenik meg. Ha ez nem így van, akkor „false” jelenik meg.

Példák a instanceof operátorra Java-ban

Először egy rövid példával mutatjuk be, hogyan működik instanceof a Java nyelvben. Itt létrehozunk egy „Animal” nevű osztályt.

public class Animal {
}
java

A következő lépés ennek az osztálynak egy „Cat” nevű alosztály kiterjesztése.

public class Cat extends Animal {
}
java

Most a Java instanceof segítségével ellenőrizhetjük, hogy a Cat osztály egy példánya az Animal osztályhoz tartozik-e. Ehhez még néhány sor kódot írunk, és a Java System.out.println parancs segítségével kinyomtatjuk az eredményt:

public class Animal {}
public class Cat extends Animal {
public static void main(String args []{
Cat cat = new Cat();
System.out.println(cat instanceof Animal);
}
}
java

A kimenetnek így kell kinéznie:

true
java

Több szint és az Object osztály

Ez az elv a Main osztályra és más alosztályokra is érvényes. A következő példa több szintet tartalmaz, és a Java instanceof operátorát if-else bővítettük. Észrevehet néhány további szöveget két perjel (//) után. Ezek Java megjegyzések. Az egyes lépéseket magyarázzák, de nem befolyásolják a kimenetet.

// Class 1
// Superclass
public class Animal {
}
// Class 2
// Subclass
class Cat extends Animal {
}
// Class 3
// Main class
class Main {
public static void main(String[] args)
Cat cat1 = new Cat();
if (cat1 instanceof Cat)
	System.out.println ("cat1 is an instance of Cat");
else
	System.out.println ("cat1 is NOT an instance of Cat");
if (cat1 instanceof Animal)
	System.out.println ("cat1 is an instance of Animal");
else
	System.out.println ("cat1 is NOT an instance of Animal");
if (cat1 instanceof Object)
	System.out.println ("cat1 is an instance of Object");
else
	System.out.println ("cat1 is NOT an instance of Object");
	}
}
java

Példánkból látható, hogy cat1 a Cat osztály és az Animal szuperosztály példánya. Így mindkét kérdés válasz „true”. Mivel az Object, vagyis a java.lang.Object osztály a hierarchia tetején áll, cat1 az Object példánya is. Tehát a Java instanceof operátor mindig true értéket ad ki, ha az Object osztályban használjuk. A kimenet így néz ki:

cat1 is an instance of Cat
cat1 is an instance of Animal
cat1 is an instance of Object
java

Null értékkel történő kimenet

Ha egy változó értéke null (azaz nem tartalmaz objektumot), a Java operátor instanceof automatikusan „false” értéket ad ki. Nézzük meg, hogyan működik ez a következő példában:

class Cat {
}
class Main {
public static void main(String[] args)
{
Cat cat2 = null;
if (cat2 instanceof Cat)
	System.out.println ("cat2 is an instance of Cat");
else
	System.out.println ("cat2 is NOT an instance of Cat");
	}
}
java

A kimenet ebben az esetben:

cat2 is NOT an instance of Cat
java

Szuperosztály/alosztály

Bár az alosztályok objektumai az alosztály megfelelő szuperosztályaihoz is tartoznak, ez fordítva nem igaz. A következő példa segít szemléltetni a osztályhierarchia ezen aspektusát:

class Animal {
}
class Cat extends Animal {
}
class Main {
public static void main(String[] args)
{
Animal bello = new Animal ();
if (bello instanceof Cat)
	System.out.println ("Bello is an instance of Cat");
else
	System.out.println ("Bello is NOT an instance of Cat");
	}
}
java

A kimenet ebben az esetben:

Bello is NOT an instance of Cat
java

Összeférhetetlen típusok hibaüzenete

Ha nincs kapcsolat egy objektum és egy osztály között, hibaüzenet jelenik meg. Ennek szemléltetésére hozzunk létre egy új osztályt „Dog” néven, amely az Animal szuperosztályhoz tartozik, de nincs kapcsolata a Cat osztályhoz.

class Dog extends Animal {
}
class Main {
public static void main(String[] args)
{
Cat cat3 = new Cat ();
System.out.println (cat3 instanceof Dog);
	}
}
java

Ebben a helyzetben hibaüzenetet kapunk, amelyben az áll, hogy nincs kapcsolat a Cat és a Dog osztályok között. Az üzenet így néz ki:

java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Cat and Dog
java
Tipp

Digitális útmutatónkban további izgalmas oktatóanyagokat és informatív cikkeket találhat a Java nyelvről. Megtalálhatja a Java és a JavaScript, valamint a Java és a Python összehasonlítását. További információkat találhat a Java bitműveleti operátorokról is.

Ugrás a főmenübe