logo

instanceof operator vs isInstance() Metoda u Javi

The instanceof operater i isInstance() obje metode se koriste za provjeru klase objekta. Ali glavna razlika dolazi kada želimo dinamički provjeriti klasu objekata, tada će metoda isInstance() raditi. Ne postoji način na koji to možemo učiniti operatorom instanceof.

Metoda isInstance ekvivalentna je operatoru instanceof. Metoda se koristi u slučaju da se objekti kreiraju tijekom izvođenja pomoću refleksije. Opća praksa kaže da ako tip treba provjeriti tijekom izvođenja, tada koristite metodu isInstance, inače se može koristiti operator instanceof.



Instanca operatora and obje metode isInstance() vraćaju Booleovu vrijednost. Metoda isInstance() je metoda klase Class u Javi dok je instanceof operator. 

Razmotrite primjer:

Java
// Java program to demonstrate working of // instanceof operator public class Test {  public static void main(String[] args)  {  Integer i = new Integer(5);  // prints true as i is instance of class  // Integer  System.out.println(i instanceof Integer);  } } 

Izlaz: 



true

Sada ako želimo provjeriti klasu objekta u vrijeme izvođenja tada moramo koristiti isInstance() metoda.

Java
// Java program to demonstrate working of isInstance() // method public class Test {  // This method tells us whether the object is an  // instance of class whose name is passed as a  // string 'c'.  public static boolean fun(Object obj String c)  throws ClassNotFoundException  {  return Class.forName(c).isInstance(obj);  }  // Driver code that calls fun()  public static void main(String[] args)  throws ClassNotFoundException  {  Integer i = new Integer(5);  // print true as i is instance of class  // Integer  boolean b = fun(i 'java.lang.Integer');  // print false as i is not instance of class  // String  boolean b1 = fun(i 'java.lang.String');  // print true as i is also instance of class  // Number as Integer class extends Number  // class  boolean b2 = fun(i 'java.lang.Number');  System.out.println(b);  System.out.println(b1);  System.out.println(b2);  } } 

Izlaz: 

true false true

Bilješka: instanceof operator izbacuje pogrešku u vrijeme kompajliranja (Nekompatibilni uvjetni tipovi operanda) ako provjeravamo objekt s drugim klasama koje on ne instancira.



Java
public class Test {  public static void main(String[] args)  {  Integer i = new Integer(5);  // Below line causes compile time error:-  // Incompatible conditional operand types  // Integer and String  System.out.println(i instanceof String);  } } 

Izlaz:  

9: error: incompatible types: Integer cannot be converted to String System.out.println(i instanceof String); ^

Obavezno pročitati:

nizovi java
  • new operator vs newInstance() metoda u Javi  
  • Refleksije u Javi