Ключевое слово instanceof
Ключевое слово instanceof проверяет, является ли объект экземпляром указанного класса, подкласса или реализует ли он указанный интерфейс. В первом операнде мы передаем объект для проверки, во втором - тип (класс или интерфейс), с которым сравниваем. Оператор возвращает true, если объект принадлежит указанному типу, и false в противном случае. Если объект равен null, результатом всегда будет false.
Начиная с Java 16 оператор instanceof поддерживает сопоставление с образцом (pattern matching). Это позволяет одновременно с проверкой типа объявить переменную, в которую будет приведен объект при успешной проверке.
Синтаксис
object instanceof Type
object instanceof Type variableName
Пример
Давайте проверим, является ли объект экземпляром класса String:
public class Main
{
public static void main(String[] args)
{
Object obj = "abcde";
System.out.println(obj instanceof String);
}
}
Результат выполнения кода:
true
Пример
Давайте проверим объект на принадлежность к классу Integer, когда на самом деле это строка:
public class Main
{
public static void main(String[] args)
{
Object obj = "abcde";
System.out.println(obj instanceof Integer);
}
}
Результат выполнения кода:
false
Пример
Давайте проверим, реализует ли объект интерфейс List:
import java.util.List;
public class Main
{
public static void main(String[] args)
{
Object obj = List.of(1, 2, 3, 4, 5);
System.out.println(obj instanceof List);
}
}
Результат выполнения кода:
true
Пример
Давайте проверим объект на null:
public class Main
{
public static void main(String[] args)
{
Object obj = null;
System.out.println(obj instanceof String);
}
}
Результат выполнения кода:
false
Пример
Давайте используем сопоставление с образцом, чтобы сразу привести объект к нужному типу:
public class Main
{
public static void main(String[] args)
{
Object obj = "abcde";
if (obj instanceof String str) {
System.out.println(str.length());
}
}
}
Результат выполнения кода:
5
Пример
Давайте проверим принадлежность объекта к подклассу:
class Animal {}
class Dog extends Animal {}
public class Main
{
public static void main(String[] args)
{
Animal animal = new Dog();
System.out.println(animal instanceof Animal);
System.out.println(animal instanceof Dog);
}
}
Результат выполнения кода:
true
true
Смотрите также
-
ключевое слово
extends,
которое наследует класс от другого класса -
ключевое слово
implements,
которое реализует интерфейс в классе -
ключевое слово
inheritance,
которое описывает наследование классов -
ключевое слово
interface,
которое объявляет интерфейс