Автор оригинала: Pankaj Kumar.
ключевое слово instanceof java используется для проверки того, относится ли объект к какому-либо типу или нет. Синтаксис оператора Java instanceof: obj Экземпляр объекта – левая сторона-это экземпляр, а правая сторона-имя класса. Оператор Java instanceof возвращает логический результат.
экземпляр Java
В этом разделе давайте посмотрим, как можно использовать ключевое слово instanceof .
Допустим, у нас есть некоторые интерфейсы и класс, определенные, как показано ниже.
interface Vehicle { }
class Car { }
class Ferrari extends Car implements Vehicle {}
Если мы проверим ключевое слово instanceof с указанными выше объектами класса, мы увидим следующие результаты:
Ferrari ferrari = new Ferrari(); ferrari instanceof Vehicle // true - Ferrari implements Vehicle ferrari instanceof Car // true - Ferrari extends Car ferrari instanceof Ferrari // true - Ferrari is Ferrari ferrari instanceof Object // true - Object is the parent type of all objects
Но если мы что-то изменим, то увидим другие результаты:
Car car = new Car(); car instanceof Ferrari // false - Car is super type of Ferrari, not other way around
instanceof – полезный инструмент, когда у вас есть коллекция объектов, и вы не уверены, что это такое.
оператор instanceof против метода isInstance()
В принципе, оба они делают одно и то же: проверяют, является ли объект экземпляром того же класса, что и другой.
Оператор instanceof работает во время компиляции, тогда как метод isInstance() работает во время выполнения. Например:
// This method tells us whether the object is an
// instance of class whose name is passed as a
// string 'c'.
public static boolean checkType(Object obj, String c)
throws ClassNotFoundException {
return Class.forName(c).isInstance(obj);
}
Давайте применим вышеприведенный метод, чтобы продемонстрировать его использование:
String str = "Shubham"; checkType(str, "java.lang.String"); // true checkType(str, "java.lang.Object"); // true
Экземпляр Java с массивом
Массив Java также является объектом, но оператор instanceof работает по-другому, когда он используется с массивом. Например;
new int[] {1} instanceof Object; // true
Но если мы попробуем что-то вроде приведенного ниже:
new String[]{"1"} instanceof String
Затем мы получаем ошибку времени компиляции в виде Несовместимых типов условных операндов String[] и String . Однако ниже использование оператора instanceof работает нормально.
new String[]{"1"} instanceof String[] // true
Пример экземпляра Java
Вот полный пример для экземпляра оператора java и isInstance метода.
package com.journaldev.instanceofoperator;
interface Vehicle {}
class Car {}
class Ferrari extends Car implements Vehicle {}
public class InstanceOfExample {
public static void main(String[] args) throws ClassNotFoundException {
Car car = new Car();
Ferrari ferrari = new Ferrari();
String str = "Pankaj";
String[] strArray = { "1" };
System.out.println(ferrari instanceof Vehicle); // true - Ferrari implements Vehicle
System.out.println(ferrari instanceof Car); // true - Ferrari extends Car
System.out.println(ferrari instanceof Ferrari); // true - Ferrari is Ferrari
System.out.println(ferrari instanceof Object); // true - Object is the parent type of all objects
System.out.println(null instanceof Object); // false - null is not an Object
System.out.println(car instanceof Ferrari); // false - Car is supertype of Ferrari, not other way around
System.out.println(new int[] { 1 } instanceof Object); // true
System.out.println(strArray instanceof String[]); // true
System.out.println("*****");
System.out.println(checkType(str, "java.lang.String")); // true
System.out.println(checkType(str, "java.lang.Object")); // true
System.out.println(checkType(str, "com.journaldev.instanceofoperator.Vehicle")); // false
System.out.println(checkType(strArray, "java.lang.Object")); // true
System.out.println(checkType(strArray, "java.lang.String")); // false
}
public static boolean checkType(Object obj, String c) throws ClassNotFoundException {
return Class.forName(c).isInstance(obj);
}
}
Это все для примера оператора java.
Ссылка: Документация Oracle