Java ope­raa­to­rit instanceof saab kasutada selleks, et kont­rol­lida, kas objekt kuulub teatud klassi. Operaator annab vastuse boolesena, st „true” või „false”. Objekti ja klassi eelnev vastavuse kont­rol­li­mine aitab vältida hi­li­se­maid vea­tea­teid.

Mis on instanceof Java-s?

Mõnede Java muutujate olemus ei ole alati kohe selge. Suurtes Java-pro­jek­ti­des, kus on palju muutujaid, võivad näiteks si­sen­dand­med põh­jus­tada muutuja ilmumise erinevate ob­jek­ti­dena. Seetõttu pakub prog­ram­mee­ri­mis­keel ka­su­ta­ja­tele instanceof. See Java-operaator tagab, et vii­te­muu­tuja instants vastab tõe­poo­lest klassile, alam­klas­sile või liidesele. Kui vastavus on olemas, väljastab operaator booli väärtuse „true”. Kui vastavust ei ole, on väljund „false”.

Tundmatu objekti tei­sen­da­misel on oluline kasutada Java instanceof, et tagada objekti kuuluvus eel­da­ta­vasse klassi. Kui see tur­va­kont­roll vahele jäetakse, võib tekkida Clas­sCas­tExcep­tion. See juhtub, kui objekt tuleb tei­sen­dada teise klassi. Veateade võib olla segadust tekitav ja põh­jus­tada probleeme, kui kood on eriti pikk. Seetõttu on parim kasutada varakult Java instanceof tur­va­li­suse ta­ga­miseks.

Mis on instanceof süntaks?

Kui kasutate Java-s instanceof, võrdleb operaator vii­te­muu­tu­jat konk­reetse klassiga, mille on samuti määranud kasutaja. See ei sisalda mingit li­sa­tea­vet objekti või klassi olemuse kohta. See lihtsalt määrab kindlaks, kas vastavus on olemas või mitte. Süntaks on lihtne ja näeb välja järgmine:

(object) instanceof (class)
java

Kui (object) on (class) juhtum, kuvatakse „true”. Kui see ei ole nii, kuvatakse „false”.

Näited instanceof ope­raa­to­rist Java keeles

Esmalt näitame teile lühikest näidet, kuidas instanceof Java-s töötab. Siin loome klassi nimega „Animal”.

public class Animal {
}
java

Järgmine samm on laiendada seda klassi alam­klas­siga nimega „Cat”.

public class Cat extends Animal {
}
java

Nüüd saame Java instanceof abil kont­rol­lida, kas Cat’i instants kuulub Animal’i klassi. Selleks kirjutame veel mõned koo­di­ri­dad ja väl­jas­tame tulemuse Java käsuga 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

Väljund peaks välja nägema järgmine:

true
java

Mitmed tasemed ja ob­jek­ti­klass

See põhimõte kehtib ka Main-klassi ja teiste alam­klas­side puhul. Järgmises näites on mitu taset ja oleme laien­da­nud Java instanceof if-else. Võite märgata, et kahe kald­kriipsu (//) järel on lisatud täien­da­vat teksti. Need on Java kom­men­taa­rid. Need sel­gi­ta­vad üksikuid samme, kuid ei mõjuta väljundit.

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

Meie näite puhul näeme, et cat1 on Cat-klassi ja Animal-ülem­klassi instants. Seega on mõlema küsimuse vastus „true”. Kuna Object ehk klass java.lang.Object asub hierarhia tipus, on cat1 ka Object-klassi instants. Seega annab instanceof -operaator Object-klassiga ka­su­ta­misel alati tu­le­mu­seks true. Väljund näeb välja järgmine:

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

Väljund null­väär­tu­sega

Kui muutujal on null­väär­tus (st ei sisalda objekti), väljastab Java operaator instanceof au­to­maat­selt väärtuse „false”. Vaadakem, kuidas see toimib järgmise näite abil:

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

Selle juhtumi väljund on:

cat2 is NOT an instance of Cat
java

Ülemklass/alamklass

Kuigi alam­klas­side objektid kuuluvad ka alam­klassi vas­ta­va­tesse ülem­klas­si­desse, ei kehti see vastupidi. Järgmine näide aitab il­lust­ree­rida klas­si­hierar­hia seda aspekti:

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

Selle juhtumi väljund on:

Bello is NOT an instance of Cat
java

Vigade sõnum ühil­du­vate tüüpide puhul

Kui objekti ja klassi vahel puudub seos, kuvatakse veateade. Selle il­lust­ree­ri­miseks loome uue klassi nimega „Dog”, mis kuulub su­per­klassi „Animal”, kuid millel puudub seos klassiga „Cat”.

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

Selles olukorras saame veateate, mis teatab, et Cat- ja Dog-klasside vahel puudub seos. Teade näeb välja järgmine:

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

Meie di­gi­taal­sest juhendist leiate veelgi põnevaid õpetusi ja in­for­ma­tiiv­seid artikleid Java kohta. Leiate võrdluse Java ja Ja­vaSc­ripti ning Java ja Pythoni vahel. Samuti saate rohkem teada Java bi­ti­vii­si­liste ope­raa­to­rite kohta.

0b1dd7e3a0897fea2b000119fa7ad36e

8599808c2d8866e01ed62784504735aa

1fb255442559cd97917d248a8670dcfa

c1afdc10986654e8b1a537189fa4e08e

Go to Main Menu