- java instanceof
- Operatoriaus egzemplioriaus pavyzdys
- Taikant operatorių instanceof su kintamuoju the have null reikšmė
- Sumažinimas naudojant instanceof operatorių
- Sumažinimas be operatoriaus egzemplioriaus
The java instanceof operatorius naudojamas patikrinti, ar objektas yra nurodyto tipo egzempliorius (klasė ar poklasis arba sąsaja).
„Java“ egzempliorius taip pat žinomas kaip tipas palyginimo operatorius nes jis lygina egzempliorių su tipu. Tai grąžina arba tiesa, arba klaidinga. Jei taikome operatorių instanceof su bet kokiu kintamuoju, kurio reikšmė nulinė, jis grąžina false.
Paprastas java instanceof pavyzdys
Pažiūrėkime paprastą egzemplioriaus operatoriaus pavyzdį, kai jis išbando dabartinę klasę.
class Simple1{ public static void main(String args[]){ Simple1 s=new Simple1(); System.out.println(s instanceof Simple1);//true } }Išbandykite dabar
Output:true
Poklasio tipo objektas taip pat yra pagrindinės klasės tipas. Pavyzdžiui, jei šuo išplečia gyvūną, tada šuns objektas gali būti nurodytas pagal šunų arba gyvūnų klasę.
Kitas „Java instanceof“ operatoriaus pavyzdys
class Animal{} class Dog1 extends Animal{//Dog inherits Animal public static void main(String args[]){ Dog1 d=new Dog1(); System.out.println(d instanceof Animal);//true } }Išbandykite dabar
Output:true
instanceof java su kintamuoju, kurio reikšmė yra nul
Jei taikome operatorių instanceof su kintamuoju, kurio reikšmė nulinė, jis grąžina false. Pažiūrėkime toliau pateiktą pavyzdį, kuriame taikome operatorių instanceof su kintamuoju, kurio reikšmė yra nul.
class Dog2{ public static void main(String args[]){ Dog2 d=null; System.out.println(d instanceof Dog2);//false } }Išbandykite dabar
Output:false
Sumažinimas naudojant java instanceof operatorių
Kai poklasio tipas nurodo pagrindinės klasės objektą, jis vadinamas sumažinimu. Jei tai atliekame tiesiogiai, kompiliatorius pateikia kompiliavimo klaidą. Jei tai atliekate naudodami tipo siuntimą, „ClassCastException“ bus išmestas vykdymo metu. Bet jei naudosime operatorių instanceof, galimas sumažinimas.
Dog d=new Animal();//Compilation error
Jei atliekame sumažinimą pagal tipo siuntimą, „ClassCastException“ išleidžiama vykdymo metu.
Dog d=(Dog)new Animal(); //Compiles successfully but ClassCastException is thrown at runtime
Galimybė sumažinti su instanceof
Pažiūrėkime pavyzdį, kai sumažinimas galimas naudojant instanceof operatorių.
styginių formatu
class Animal { } class Dog3 extends Animal { static void method(Animal a) { if(a instanceof Dog3){ Dog3 d=(Dog3)a;//downcasting System.out.println('ok downcasting performed'); } } public static void main (String [] args) { Animal a=new Dog3(); Dog3.method(a); } }Išbandykite dabar
Output:ok downcasting performed
Sumažinimas nenaudojant Java instanceof
Sumažinti taip pat galima nenaudojant operatoriaus instanceof, kaip parodyta šiame pavyzdyje:
class Animal { } class Dog4 extends Animal { static void method(Animal a) { Dog4 d=(Dog4)a;//downcasting System.out.println('ok downcasting performed'); } public static void main (String [] args) { Animal a=new Dog4(); Dog4.method(a); } }Išbandykite dabar
Output:ok downcasting performed
Pažvelkime atidžiau į šį tikrąjį objektą, kuris yra nurodytas a, yra šunų klasės objektas. Taigi, jei mes jį sumažinsime, tai gerai. Bet kas bus, jei parašysime:
Animal a=new Animal(); Dog.method(a); //Now ClassCastException but not in case of instanceof operator
Suprasti tikrąjį instanceof naudojimą Java
Pažiūrėkime, kaip tikrasis raktinio žodžio instanceof naudojimas toliau pateiktame pavyzdyje.
interface Printable{} class A implements Printable{ public void a(){System.out.println('a method');} } class B implements Printable{ public void b(){System.out.println('b method');} } class Call{ void invoke(Printable p){//upcasting if(p instanceof A){ A a=(A)p;//Downcasting a.a(); } if(p instanceof B){ B b=(B)p;//Downcasting b.b(); } } }//end of Call class class Test4{ public static void main(String args[]){ Printable p=new B(); Call c=new Call(); c.invoke(p); } }Išbandykite dabar
Output: b method