Je kunt de Java-operator instanceof gebruiken om te con­tro­le­ren of een object tot een bepaalde klasse behoort. De operator geeft het antwoord in de vorm van een Boole­aan­se uitspraak, d.w.z. ‘waar’ of ‘onwaar’. Door vooraf te con­tro­le­ren of het object en de klasse over­een­ko­men, kun je later fout­mel­din­gen voorkomen.

Wat is instanceof in Java?

De aard van sommige va­ri­a­be­len in Java is niet altijd meteen duidelijk. In grote Java-projecten met talrijke va­ri­a­be­len kunnen in­voer­ge­ge­vens er bij­voor­beeld voor zorgen dat een variabele als ver­schil­len­de objecten ver­schijnt. Daarom biedt de pro­gram­meer­taal ge­brui­kers instanceof. Deze Java-operator zorgt ervoor dat de instantie van een re­fe­ren­tie­va­ri­a­be­le echt over­een­komt met een klasse, subklasse of interface. Als er een over­een­komst is, geeft de operator de Boole­aan­se waarde ‘true’ weer. Als er geen over­een­komst is, is de uitvoer ‘false’.

Bij het con­ver­te­ren van een onbekend object is het be­lang­rijk om Java instanceof te gebruiken om ervoor te zorgen dat het object tot de ver­on­der­stel­de klasse behoort. Als u deze vei­lig­heids­con­tro­le overslaat, kan er een Clas­sCast­Ex­cep­ti­on worden ge­ge­ne­reerd. Dit gebeurt wanneer een object naar een andere klasse moet worden ge­con­ver­teerd. De fout­mel­ding kan ver­war­rend zijn en problemen ver­oor­za­ken als de code bijzonder lang is. Daarom is het het beste om Java instanceof in een vroeg stadium te gebruiken als voor­zorgs­maat­re­gel.

Wat is de syntaxis voor instanceof?

Wanneer u instanceof in Java gebruikt, ver­ge­lijkt de operator een re­fe­ren­tie­va­ri­a­be­le met een spe­ci­fie­ke klasse die ook door de gebruiker is opgegeven. Het bevat geen aan­vul­len­de in­for­ma­tie over de aard van het object of de klasse. Het bepaalt alleen of er een over­een­komst is of niet. De syntaxis is eenvoudig en ziet er als volgt uit:

(object) instanceof (class)
java

Als (object) een instantie is van (class), wordt ‘waar’ weer­ge­ge­ven. Als dit niet het geval is, wordt ‘onwaar’ weer­ge­ge­ven.

Voor­beel­den van instanceof ope­ra­to­ren in Java

Eerst laten we u een kort voorbeeld zien om te de­mon­stre­ren hoe instanceof werkt in Java. Hier maken we een klasse aan met de naam ‘Animal’.

public class Animal {
}
java

De volgende stap is om deze klasse uit te breiden met een subklasse genaamd ‘Cat’.

public class Cat extends Animal {
}
java

Nu kunnen we Java instanceof gebruiken om te con­tro­le­ren of een instantie van Cat tot de klasse Animal behoort. Hiervoor schrijven we nog enkele regels code en geven we het resultaat weer met Java-commando System.out.println:

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

De uitvoer zou er als volgt uit moeten zien:

true
java

Meerdere niveaus en de Object-klasse

Dit principe werkt ook met de Main-klasse en andere sub­klas­sen. Het volgende voorbeeld bevat ver­schil­len­de niveaus en we hebben de instanceof in Java uit­ge­breid met if-else. Je ziet misschien wat extra tekst achter twee schuine strepen (//). Dit zijn Java-op­mer­kin­gen. Ze geven uitleg over de af­zon­der­lij­ke stappen, maar hebben geen invloed op de uitvoer.

// 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

Als we naar ons voorbeeld kijken, zien we dat cat1 een instantie is van de klasse Cat en de su­per­klas­se Animal. Als zodanig is het antwoord op beide vragen ‘true’. Aangezien Object, of klasse java.lang.Object, bovenaan de hi­ë­rar­chie staat, is cat1 ook een instantie van Object. De instanceof zal dus altijd true uitvoeren wanneer deze wordt gebruikt met de klasse Object. De uitvoer ziet er als volgt uit:

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

Uitvoer met een null-waarde

Als een variabele een null-waarde heeft (d.w.z. geen object bevat), geeft de Java-operator instanceof au­to­ma­tisch ‘false’ weer. Laten we eens kijken hoe dit werkt aan de hand van het volgende voorbeeld:

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

De uitvoer in dit geval is:

cat2 is NOT an instance of Cat
java

Su­per­klas­se/subklasse

Hoewel objecten in sub­klas­sen ook behoren tot de over­een­kom­sti­ge su­per­klas­sen van de subklasse, geldt dit niet andersom. Het volgende voorbeeld il­lu­streert dit aspect van de klas­sen­hi­ë­rar­chie:

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

De uitvoer in dit geval is:

Bello is NOT an instance of Cat
java

Fout­mel­ding voor in­com­pa­ti­be­le typen

Als er geen verband bestaat tussen een object en een klasse, wordt er een fout­mel­ding weer­ge­ge­ven. Om dit te il­lu­stre­ren, maken we een nieuwe klasse aan met de naam ‘Dog’, die behoort tot de su­per­klas­se Animal, maar geen verband houdt met Cat.

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

In deze situatie krijgen we een fout­mel­ding te zien waarin staat dat er geen verband bestaat tussen de klassen Cat en Dog. De melding ziet er als volgt uit:

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

In onze digitale gids vindt u meer in­te­res­san­te tutorials en in­for­ma­tie­ve artikelen over Java. U vindt er een ver­ge­lij­king tussen Java en Ja­vaScript en een ver­ge­lij­king tussen Java en Python. U kunt ook meer te weten komen over Java-bitwise-ope­ra­to­ren.

Ga naar hoofdmenu