Jūs varat izmantot Java operatoru instanceof, lai pār­bau­dī­tu, vai objekts pieder pie konkrētas klases. Operators sniedz atbildi Boole’a izteikuma veidā, t.i., “true” vai “false”. Ie­pa­zīs­to­ties ar objektu un klasi iepriekš, varat iz­vai­rī­ties no kļūdu zi­ņo­ju­miem vēlāk.

Kas ir instanceof Java valodā?

Dažu mainīgo lielumu būtība Java valodā ne vienmēr ir uzreiz skaidra. Lielos Java projektos ar daudzām mai­nī­ga­jām, piemēram, ievades dati var izraisīt to, ka mainīgā parādās kā atšķirīgi objekti. Tāpēc prog­ram­mē­ša­nas valoda nodrošina lie­to­tā­jiem instanceof. Šis Java operators nodrošina, ka atsauces mainīgā instances patiešām atbilst klasei, ap­akš­kla­sei vai saskarnes. Ja ir at­bil­stī­ba, operators izvada Boole’a vērtību “true”. Ja nav at­bil­stī­bas, izvade ir “false”.

Pār­vei­do­jot nezināmu objektu, ir svarīgi izmantot Java instanceof, lai no­dro­ši­nā­tu, ka objekts pieder pie pieņemtās klases. Ja izlaidat šo drošības pārbaudi, var tikt izsniegts ClassCas­tExcep­tion. Tas notiek, ja objekts ir jā­pār­vei­do citā klasē. Kļūdas ziņojums var būt neskaidrs un radīt problēmas, ja kods ir īpaši garš. Tāpēc vislabāk ir jau sākumā izmantot Java instanceof kā drošības pasākumu.

Kāda ir sintakse skaitlim instanceof?

Kad iz­man­to­jat instanceof Java, operators salīdzina atsauces mainīgo ar konkrētu klasi, ko arī norāda lietotājs. Tas neietver papildu in­for­mā­ci­ju par objekta vai klases būtību. Tas vienkārši nosaka, vai ir at­bil­stī­ba vai nav. Sintakse ir vienkārša un izskatās šādi:

(object) instanceof (class)
java

Ja (object) ir (class) instances, tiek parādīts “true”. Ja tas tā nav, tiek parādīts “false”.

instanceof operatoru piemēri Java valodā

Vispirms parādīsim īsu piemēru, lai de­mons­trē­tu, kā instanceof darbojas Java. Šeit iz­vei­do­sim klasi ar nosaukumu „Animal”.

public class Animal {
}
java

Nākamais solis ir pa­pla­ši­nāt šo klasi ar ap­akš­kla­si ar nosaukumu „Cat”.

public class Cat extends Animal {
}
java

Tagad mēs varam izmantot Java instanceof, lai pār­bau­dī­tu, vai Cat instances pieder Animal klasei. Lai to izdarītu, mēs iz­man­to­sim vēl dažas rindas koda un izvadīsim rezultātu ar Java komandu 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

Rezultāts izskatās šādi:

true
java

Vairāki līmeņi un objekta klase

Šis princips darbojas arī ar Main klasi un citām ap­akš­kla­sēm. Nākamajā piemērā ir vairāki līmeņi, un mēs esam pa­pla­ši­nā­ju­ši Java operatoru instanceof ar if-else. Jūs varat pamanīt papildu tekstu, kas atrodas aiz diviem slīpsvīt­rām (//). Tie ir Java komentāri. Tie izskaidro at­se­viš­ķus soļus, bet neietekmē izvadi.

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

Pa­ska­to­ties uz mūsu piemēru, varam redzēt, ka cat1 ir Cat klases un Animal su­perkla­ses instances. Tādējādi atbilde uz abiem jau­tā­ju­miem ir „true”. Tā kā Object vai klase java.lang.Object atrodas hie­rar­hi­jas augšgalā, cat1 ir arī Object instances. Tātad Java instanceof operators vienmēr izvadīs true, ja to izmanto kopā ar Object klasi. Izvade izskatās šādi:

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

Izvade ar nulles vērtību

Ja mai­nī­ga­jam ir null vērtība (t.i., tas nesatur objektu), Java operators instanceof au­to­mā­tis­ki izvada ‘false’. Ap­ska­tī­sim, kā tas darbojas, iz­man­to­jot šādu piemēru:

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

Šajā gadījumā izvade ir:

cat2 is NOT an instance of Cat
java

Su­perkla­se/ap­akš­kla­se

Lai gan ap­akš­kla­ses objekti pieder arī ap­akš­kla­ses at­bil­sto­ša­jām virskla­sēm, otrādi tas ne­dar­bo­jas. Šo klases hie­rar­hi­jas aspektu palīdz ilustrēt šāds piemērs:

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

Šajā gadījumā izvade ir:

Bello is NOT an instance of Cat
java

Kļūdas ziņojums par ne­sa­de­rī­giem tipiem

Ja starp objektu un klasi nav saiknes, tiks parādīts kļūdas ziņojums. Lai to ilustrētu, iz­vei­do­sim jaunu klasi ar nosaukumu “Dog”, kas pieder pie Animal su­perkla­ses, bet nav saistīta ar Cat.

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

Šajā situācijā mēs saņemsim kļūdas ziņojumu, kas mums paziņos, ka starp Cat un Dog klasēm nav saiknes. Ziņojums izskatās šādi:

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

Mūsu di­gi­tā­la­jā ceļvedī at­ra­dī­siet vairāk aiz­rau­jo­šu apmācību materiālu un in­for­ma­tī­vu rakstu par Java. Tur varat atrast Java un Ja­vaScript sa­lī­dzi­nā­ju­mu, kā arī Java un Python sa­lī­dzi­nā­ju­mu. Tur varat arī uzzināt vairāk par Java bitu ope­ra­to­riem.

0b1dd7e3a0897fea2b000119fa7ad36e

8599808c2d8866e01ed62784504735aa

1fb255442559cd97917d248a8670dcfa

732d953cbb856e44160706a61b959638

Go to Main Menu