Kuidas Java instanceof operaator töötab
Java operaatorit instanceof saab kasutada selleks, et kontrollida, kas objekt kuulub teatud klassi. Operaator annab vastuse boolesena, st „true” või „false”. Objekti ja klassi eelnev vastavuse kontrollimine aitab vältida hilisemaid veateateid.
Mis on instanceof Java-s?
Mõnede Java muutujate olemus ei ole alati kohe selge. Suurtes Java-projektides, kus on palju muutujaid, võivad näiteks sisendandmed põhjustada muutuja ilmumise erinevate objektidena. Seetõttu pakub programmeerimiskeel kasutajatele instanceof. See Java-operaator tagab, et viitemuutuja instants vastab tõepoolest klassile, alamklassile või liidesele. Kui vastavus on olemas, väljastab operaator booli väärtuse „true”. Kui vastavust ei ole, on väljund „false”.
Tundmatu objekti teisendamisel on oluline kasutada Java instanceof, et tagada objekti kuuluvus eeldatavasse klassi. Kui see turvakontroll vahele jäetakse, võib tekkida ClassCastException. See juhtub, kui objekt tuleb teisendada teise klassi. Veateade võib olla segadust tekitav ja põhjustada probleeme, kui kood on eriti pikk. Seetõttu on parim kasutada varakult Java instanceof turvalisuse tagamiseks.
Mis on instanceof süntaks?
Kui kasutate Java-s instanceof, võrdleb operaator viitemuutujat konkreetse klassiga, mille on samuti määranud kasutaja. See ei sisalda mingit lisateavet 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)javaKui (object) on (class) juhtum, kuvatakse „true”. Kui see ei ole nii, kuvatakse „false”.
Näited instanceof operaatorist Java keeles
Esmalt näitame teile lühikest näidet, kuidas instanceof Java-s töötab. Siin loome klassi nimega „Animal”.
public class Animal {
}javaJärgmine samm on laiendada seda klassi alamklassiga nimega „Cat”.
public class Cat extends Animal {
}javaNüüd saame Java instanceof abil kontrollida, kas Cat’i instants kuulub Animal’i klassi. Selleks kirjutame veel mõned koodiridad ja väljastame 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);
}
}javaVäljund peaks välja nägema järgmine:
truejavaMitmed tasemed ja objektiklass
See põhimõte kehtib ka Main-klassi ja teiste alamklasside puhul. Järgmises näites on mitu taset ja oleme laiendanud Java instanceof if-else. Võite märgata, et kahe kaldkriipsu (//) järel on lisatud täiendavat teksti. Need on Java kommentaarid. Need selgitavad ü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");
}
}javaMeie näite puhul näeme, et cat1 on Cat-klassi ja Animal-ülemklassi 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 kasutamisel alati tulemuseks 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 ObjectjavaVäljund nullväärtusega
Kui muutujal on nullväärtus (st ei sisalda objekti), väljastab Java operaator instanceof automaatselt 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");
}
}javaSelle juhtumi väljund on:
cat2 is NOT an instance of CatjavaÜlemklass/alamklass
Kuigi alamklasside objektid kuuluvad ka alamklassi vastavatesse ülemklassidesse, ei kehti see vastupidi. Järgmine näide aitab illustreerida klassihierarhia 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");
}
}javaSelle juhtumi väljund on:
Bello is NOT an instance of CatjavaVigade sõnum ühilduvate tüüpide puhul
Kui objekti ja klassi vahel puudub seos, kuvatakse veateade. Selle illustreerimiseks loome uue klassi nimega „Dog”, mis kuulub superklassi „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);
}
}javaSelles 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 DogjavaMeie digitaalsest juhendist leiate veelgi põnevaid õpetusi ja informatiivseid artikleid Java kohta. Leiate võrdluse Java ja JavaScripti ning Java ja Pythoni vahel. Samuti saate rohkem teada Java bitiviisiliste operaatorite kohta.
0b1dd7e3a0897fea2b000119fa7ad36e
8599808c2d8866e01ed62784504735aa
1fb255442559cd97917d248a8670dcfa
c1afdc10986654e8b1a537189fa4e08e