Java ope­ra­to­rius instanceof leidžia pa­tik­rin­ti, ar objektas priklauso tam tikrai klasei. Ope­ra­to­rius pateikia atsakymą Būlio teiginio forma, t. y. „true“ arba „false“. Iš anksto pa­tik­ri­nus, ar objektas ir klasė atitinka vienas kitą, galima išvengti vėlesnių klaidų pranešimų.

Kas yra instanceof Java kalboje?

Kai kurių Java kintamųjų pobūdis ne visada yra iš karto aiškus. Didelėse Java pro­jek­tuo­se, kuriuose yra daug kintamųjų, įvesties duomenys, pa­vyz­džiui, gali sukelti, kad kin­ta­ma­sis atrodytų kaip skirtingi objektai. Štai kodėl prog­ra­ma­vi­mo kalba var­to­to­jams siūlo instanceof. Šis Java ope­ra­to­rius užtikrina, kad nuorodos kintamojo eg­zemp­lio­rius tikrai atitiktų klasę, paklasę arba sąsają. Jei yra ati­ti­ki­mas, ope­ra­to­rius išveda Būlio vertę „true“. Jei atitikimo nėra, išvedama „false“.

Kon­ver­tuo­jant nežinomą objektą, svarbu naudoti Java instanceof, kad būtų už­tik­rin­ta, jog objektas priklauso numatytai klasei. Jei pra­lei­si­te šį saugumo pa­tik­ri­ni­mą, gali būti išduotas Class­Cas­tExcep­tion. Tai atsitinka, kai objektas turi būti kon­ver­tuo­tas į kitą klasę. Klaidos pra­ne­ši­mas gali būti painus ir sukelti problemų, jei kodas yra ypač ilgas. Todėl geriausia iš anksto naudoti Java instanceof kaip apsaugos priemonę.

Kokia yra instanceof sintaksė?

Kai naudojate instanceof Java kalboje, ope­ra­to­rius lygina nuorodų kintamąjį su konkrečia klase, kurią taip pat nurodo var­to­to­jas. Jis neapima jokios pa­pil­do­mos in­for­ma­ci­jos apie objekto ar klasės pobūdį. Jis tiesiog nustato, ar yra ati­ti­ki­mas, ar ne. Sintaksė yra paprasta ir atrodo taip:

(object) instanceof (class)
java

Jei (object) yra (class) atvejis, rodomas „true“. Jei taip nėra, rodomas „false“.

instanceof ope­ra­to­riaus pa­vyz­džiai Java kalboje

Pir­miau­sia pa­teik­si­me trumpą pavyzdį, kuris parodys, kaip instanceof veikia Java kalboje. Čia sukursime klasę pa­va­di­ni­mu „Animal“.

public class Animal {
}
java

Kitas žingsnis – išplėsti šią klasę, sukuriant pakaitinę klasę „Cat“.

public class Cat extends Animal {
}
java

Dabar galime naudoti Java instanceof, kad pa­tik­rin­tu­me, ar Cat klasės instansas priklauso Animal klasei. Tam pa­ra­šy­si­me keletą papildomų kodų eilučių ir išvesime rezultatą naudodami Java komandą 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

Re­zul­ta­tas turėtų atrodyti taip:

true
java

Keli lygiai ir objektų klasė

Šis principas taip pat veikia su pag­rin­di­ne klase ir kitomis pa­kai­ti­nė­mis klasėmis. Kitas pavyzdys apima kelis lygius, o mes išplėtėme Java instanceof ope­ra­to­rius iki if-else. Galite pastebėti papildomą tekstą, esantį po dviejų brūkšne­lių (//). Tai yra Java ko­men­ta­rai. Jie paaiškina atskirus žingsnius, bet neturi įtakos re­zul­ta­tui.

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

Žiūrėdami į mūsų pavyzdį, matome, kad cat1 yra Cat klasės ir Animal su­per­kla­sės instansas. Taigi, atsakymas į abu klausimus yra „true“. Kadangi Object arba klasė java.lang.Object yra hie­rar­chi­jos viršuje, cat1 taip pat yra Object instansas. Taigi, Java instanceof ope­ra­to­rius visada išves true, kai nau­do­ja­mas su Object klase. Re­zul­ta­tas atrodo taip:

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

Išvestis su nuline verte

Jei kin­ta­ma­sis turi nulio vertę (t. y. neapima objekto), Java ope­ra­to­rius instanceof au­to­ma­tiš­kai išveda „false“. Pa­žiū­rė­ki­me, kaip tai veikia, rem­da­mie­si šiuo pavyzdžiu:

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

Šiuo atveju re­zul­ta­tas yra:

cat2 is NOT an instance of Cat
java

Su­per­kla­sė/paklasė

Nors subklasių objektai taip pat priklauso subklasių ati­tin­ka­moms su­per­kla­sėms, at­virkš­čiai tai neveikia. Šis pavyzdys padeda iliust­ruo­ti šį klasės hie­rar­chi­jos aspektą:

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

Šiuo atveju re­zul­ta­tas yra:

Bello is NOT an instance of Cat
java

Klaidos pra­ne­ši­mas dėl ne­su­de­ri­na­mų tipų

Jei tarp objekto ir klasės nėra ryšio, bus rodomas klaidos pra­ne­ši­mas. Norėdami tai iliust­ruo­ti, sukursime naują klasę „Dog“, kuri priklauso virš­kla­sei „Animal“, bet neturi ryšio su „Cat“.

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

Šioje si­tu­aci­jo­je gausime klaidos pranešimą, in­for­muo­jan­tį, kad nėra ryšio tarp Cat ir Dog klasių. Pra­ne­ši­mas atrodo taip:

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

Mūsų skait­me­ni­nia­me vadove rasite daugiau įdomių pamokų ir in­for­ma­ty­vių straips­nių apie Java. Čia rasite Java ir Ja­vaSc­ript pa­ly­gi­ni­mą, taip pat Java ir Python pa­ly­gi­ni­mą. Taip pat galite sužinoti daugiau apie Java bitinius ope­ra­to­rius.

0b1dd7e3a0897fea2b000119fa7ad36e

8599808c2d8866e01ed62784504735aa

1fb255442559cd97917d248a8670dcfa

2c4d199b9305e5bc33a328e3ed4b1a39

Go to Main Menu