Hvordan Java-operatoren instanceof fungerer
Du kan bruke Java-operatoren instanceof til å sjekke om et objekt tilhører en bestemt klasse. Operatoren gir svaret i form av en boolsk setning, dvs. «true» eller «false». Ved å sjekke på forhånd om objektet og klassen stemmer overens, kan du unngå feilmeldinger senere.
Hva er instanceof i Java?
Naturen til noen variabler i Java er ikke alltid umiddelbart åpenbar. I store Java-prosjekter med mange variabler kan for eksempel inndata føre til at en variabel vises som forskjellige objekter. Derfor gir programmeringsspråket brukerne instanceof. Denne Java-operatoren sikrer at instansen av en referansevariabel virkelig tilsvarer en klasse, underklasse eller grensesnitt. Hvis det er en samsvar, gir operatoren den boolske verdien «true». Hvis det ikke er noen samsvar, er utdataene «false».
Når du konverterer et ukjent objekt, er det viktig å bruke Java instanceof for å sikre at objektet tilhører den antatte klassen. Hvis du hopper over denne sikkerhetskontrollen, kan det oppstå en ClassCastException. Dette skjer når et objekt må konverteres til en annen klasse. Feilmeldingen kan være forvirrende og kan forårsake problemer hvis koden er spesielt lang. Derfor er det best å bruke Java instanceof tidlig som en sikkerhetsforanstaltning.
Hva er syntaksen for instanceof?
Når du bruker instanceof i Java, sammenligner operatøren en referansevariabel med en spesifikk klasse som også er spesifisert av brukeren. Den inkluderer ikke tilleggsinformasjon om objektets eller klassens natur. Den avgjør bare om det er en samsvar eller ikke. Syntaksen er enkel og ser slik ut:
(object) instanceof (class)javaHvis (object) er en instans av (class), vises «true». Hvis dette ikke er tilfelle, vises «false».
Eksempler på instanceof i Java
Først viser vi deg et kort eksempel for å demonstrere hvordan instanceof fungerer i Java. Her oppretter vi en klasse kalt «Animal».
public class Animal {
}javaDet neste trinnet er å utvide denne klassen med en underklasse kalt «Cat».
public class Cat extends Animal {
}javaNå kan vi bruke Java instanceof til å sjekke om en instans av Cat tilhører Animal-klassen. For å gjøre dette skriver vi noen flere linjer med kode og viser resultatet med Java-kommandoen 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);
}
}javaResultatet skal se slik ut:
truejavaFlere nivåer og Object-klassen
Dette prinsippet fungerer også med Main-klassen og andre underklasser. Det neste eksemplet inneholder flere nivåer, og vi har utvidet instanceof i Java med if-else. Du vil kanskje legge merke til at det er lagt til litt ekstra tekst etter to skråstreker (//). Dette er Java-kommentarer. De forklarer de enkelte trinnene, men påvirker ikke utdataene.
// 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");
}
}javaNår vi ser på eksemplet vårt, kan vi se at cat1 er en instans av klassen Cat og superklassen Animal. Som sådan er svaret på begge spørsmålene «true». Siden Object, eller klassen java.lang.Object, er øverst i hierarkiet, er cat1 også en instans av Object. instanceof atoren vil derfor alltid gi utdata true når den brukes med klassen Object. Utdataene ser slik ut:
cat1 is an instance of Cat
cat1 is an instance of Animal
cat1 is an instance of ObjectjavaUtdata med nullverdi
Hvis en variabel har en nullverdi (dvs. ikke inneholder et objekt), gir Java-operatoren instanceof automatisk ut «false». La oss se på hvordan dette fungerer med følgende eksempel:
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");
}
}javaUtdataene i dette tilfellet er:
cat2 is NOT an instance of CatjavaSuperklasse/underklasse
Selv om objekter i underklasser også tilhører underklassens tilsvarende overklasser, fungerer det ikke omvendt. Følgende eksempel illustrerer dette aspektet ved klassehierarkiet:
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");
}
}javaUtdataene i dette tilfellet er:
Bello is NOT an instance of CatjavaFeilmelding for inkompatible typer
Hvis det ikke er noen forbindelse mellom et objekt og en klasse, vises en feilmelding. For å illustrere dette, la oss opprette en ny klasse kalt «Hund» som tilhører superklassen Dyr, men som ikke har noen forbindelse til Katt.
class Dog extends Animal {
}
class Main {
public static void main(String[] args)
{
Cat cat3 = new Cat ();
System.out.println (cat3 instanceof Dog);
}
}javaI denne situasjonen vil vi motta en feilmelding som forteller oss at det ikke er noen forbindelse mellom klassene Cat og Dog. Meldingen ser slik ut:
java.lang.Error: Unresolved compilation problem:
Incompatible conditional operand types Cat and DogjavaI vår digitale guide finner du flere spennende veiledninger og informative artikler om Java. Du finner en sammenligning av Java og JavaScript, samt en sammenligning av Java og Python. Du kan også finne ut mer om bitvise operatører i Java.
0b1dd7e3a0897fea2b000119fa7ad36e
8599808c2d8866e01ed62784504735aa
1fb255442559cd97917d248a8670dcfa
732d953cbb856e44160706a61b959638