Kaip veikia Java operatorius instanceof
Java operatorius instanceof leidžia patikrinti, ar objektas priklauso tam tikrai klasei. Operatorius pateikia atsakymą Būlio teiginio forma, t. y. „true“ arba „false“. Iš anksto patikrinus, 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 projektuose, kuriuose yra daug kintamųjų, įvesties duomenys, pavyzdžiui, gali sukelti, kad kintamasis atrodytų kaip skirtingi objektai. Štai kodėl programavimo kalba vartotojams siūlo instanceof. Šis Java operatorius užtikrina, kad nuorodos kintamojo egzempliorius tikrai atitiktų klasę, paklasę arba sąsają. Jei yra atitikimas, operatorius išveda Būlio vertę „true“. Jei atitikimo nėra, išvedama „false“.
Konvertuojant nežinomą objektą, svarbu naudoti Java instanceof, kad būtų užtikrinta, jog objektas priklauso numatytai klasei. Jei praleisite šį saugumo patikrinimą, gali būti išduotas ClassCastException. Tai atsitinka, kai objektas turi būti konvertuotas į kitą klasę. Klaidos pranešimas 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, operatorius lygina nuorodų kintamąjį su konkrečia klase, kurią taip pat nurodo vartotojas. Jis neapima jokios papildomos informacijos apie objekto ar klasės pobūdį. Jis tiesiog nustato, ar yra atitikimas, ar ne. Sintaksė yra paprasta ir atrodo taip:
(object) instanceof (class)javaJei (object) yra (class) atvejis, rodomas „true“. Jei taip nėra, rodomas „false“.
instanceof operatoriaus pavyzdžiai Java kalboje
Pirmiausia pateiksime trumpą pavyzdį, kuris parodys, kaip instanceof veikia Java kalboje. Čia sukursime klasę pavadinimu „Animal“.
public class Animal {
}javaKitas žingsnis – išplėsti šią klasę, sukuriant pakaitinę klasę „Cat“.
public class Cat extends Animal {
}javaDabar galime naudoti Java instanceof, kad patikrintume, ar Cat klasės instansas priklauso Animal klasei. Tam parašysime 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);
}
}javaRezultatas turėtų atrodyti taip:
truejavaKeli lygiai ir objektų klasė
Šis principas taip pat veikia su pagrindine klase ir kitomis pakaitinėmis klasėmis. Kitas pavyzdys apima kelis lygius, o mes išplėtėme Java instanceof operatorius iki if-else. Galite pastebėti papildomą tekstą, esantį po dviejų brūkšnelių (//). Tai yra Java komentarai. Jie paaiškina atskirus žingsnius, bet neturi įtakos rezultatui.
// 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 superklasės instansas. Taigi, atsakymas į abu klausimus yra „true“. Kadangi Object arba klasė java.lang.Object yra hierarchijos viršuje, cat1 taip pat yra Object instansas. Taigi, Java instanceof operatorius visada išves true, kai naudojamas su Object klase. Rezultatas atrodo taip:
cat1 is an instance of Cat
cat1 is an instance of Animal
cat1 is an instance of ObjectjavaIšvestis su nuline verte
Jei kintamasis turi nulio vertę (t. y. neapima objekto), Java operatorius instanceof automatiškai išveda „false“. Pažiūrėkime, kaip tai veikia, remdamiesi š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 rezultatas yra:
cat2 is NOT an instance of CatjavaSuperklasė/paklasė
Nors subklasių objektai taip pat priklauso subklasių atitinkamoms superklasėms, atvirkščiai tai neveikia. Šis pavyzdys padeda iliustruoti šį klasės hierarchijos 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 rezultatas yra:
Bello is NOT an instance of CatjavaKlaidos pranešimas dėl nesuderinamų tipų
Jei tarp objekto ir klasės nėra ryšio, bus rodomas klaidos pranešimas. Norėdami tai iliustruoti, sukursime naują klasę „Dog“, kuri priklauso viršklasei „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 situacijoje gausime klaidos pranešimą, informuojantį, kad nėra ryšio tarp Cat ir Dog klasių. Pranešimas atrodo taip:
java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Cat and DogjavaMūsų skaitmeniniame vadove rasite daugiau įdomių pamokų ir informatyvių straipsnių apie Java. Čia rasite Java ir JavaScript palyginimą, taip pat Java ir Python palyginimą. Taip pat galite sužinoti daugiau apie Java bitinius operatorius.
0b1dd7e3a0897fea2b000119fa7ad36e
8599808c2d8866e01ed62784504735aa
1fb255442559cd97917d248a8670dcfa
2c4d199b9305e5bc33a328e3ed4b1a39