Kā darbojas Java instanceof operators
Jūs varat izmantot Java operatoru instanceof, lai pārbaudītu, vai objekts pieder pie konkrētas klases. Operators sniedz atbildi Boole’a izteikuma veidā, t.i., “true” vai “false”. Iepazīstoties ar objektu un klasi iepriekš, varat izvairīties no kļūdu ziņojumiem 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 mainīgajām, piemēram, ievades dati var izraisīt to, ka mainīgā parādās kā atšķirīgi objekti. Tāpēc programmēšanas valoda nodrošina lietotājiem instanceof. Šis Java operators nodrošina, ka atsauces mainīgā instances patiešām atbilst klasei, apakšklasei vai saskarnes. Ja ir atbilstība, operators izvada Boole’a vērtību “true”. Ja nav atbilstības, izvade ir “false”.
Pārveidojot nezināmu objektu, ir svarīgi izmantot Java instanceof, lai nodrošinātu, ka objekts pieder pie pieņemtās klases. Ja izlaidat šo drošības pārbaudi, var tikt izsniegts ClassCastException. Tas notiek, ja objekts ir jāpārveido 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 izmantojat instanceof Java, operators salīdzina atsauces mainīgo ar konkrētu klasi, ko arī norāda lietotājs. Tas neietver papildu informāciju par objekta vai klases būtību. Tas vienkārši nosaka, vai ir atbilstība vai nav. Sintakse ir vienkārša un izskatās šādi:
(object) instanceof (class)javaJa (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 demonstrētu, kā instanceof darbojas Java. Šeit izveidosim klasi ar nosaukumu „Animal”.
public class Animal {
}javaNākamais solis ir paplašināt šo klasi ar apakšklasi ar nosaukumu „Cat”.
public class Cat extends Animal {
}javaTagad mēs varam izmantot Java instanceof, lai pārbaudītu, vai Cat instances pieder Animal klasei. Lai to izdarītu, mēs izmantosim 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);
}
}javaRezultāts izskatās šādi:
truejavaVairāki līmeņi un objekta klase
Šis princips darbojas arī ar Main klasi un citām apakšklasēm. Nākamajā piemērā ir vairāki līmeņi, un mēs esam paplašinājuši Java operatoru instanceof ar if-else. Jūs varat pamanīt papildu tekstu, kas atrodas aiz diviem slīpsvītrām (//). Tie ir Java komentāri. Tie izskaidro atsevišķ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");
}
}javaPaskatoties uz mūsu piemēru, varam redzēt, ka cat1 ir Cat klases un Animal superklases instances. Tādējādi atbilde uz abiem jautājumiem ir „true”. Tā kā Object vai klase java.lang.Object atrodas hierarhijas 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 ObjectjavaIzvade ar nulles vērtību
Ja mainīgajam ir null vērtība (t.i., tas nesatur objektu), Java operators instanceof automātiski izvada ‘false’. Apskatīsim, kā tas darbojas, izmantojot šā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 CatjavaSuperklase/apakšklase
Lai gan apakšklases objekti pieder arī apakšklases atbilstošajām virsklasēm, otrādi tas nedarbojas. Šo klases hierarhijas 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 CatjavaKļūdas ziņojums par nesaderīgiem tipiem
Ja starp objektu un klasi nav saiknes, tiks parādīts kļūdas ziņojums. Lai to ilustrētu, izveidosim jaunu klasi ar nosaukumu “Dog”, kas pieder pie Animal superklases, 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 DogjavaMūsu digitālajā ceļvedī atradīsiet vairāk aizraujošu apmācību materiālu un informatīvu rakstu par Java. Tur varat atrast Java un JavaScript salīdzinājumu, kā arī Java un Python salīdzinājumu. Tur varat arī uzzināt vairāk par Java bitu operatoriem.
0b1dd7e3a0897fea2b000119fa7ad36e
8599808c2d8866e01ed62784504735aa
1fb255442559cd97917d248a8670dcfa
732d953cbb856e44160706a61b959638