Ключевое слово
instanceof
представляет собой двоичный оператор , используемый для проверки, является ли объект (экземпляр) подтипом данного Типа.
Представьте себе:
interface Domestic {}
class Animal {}
class Dog extends Animal implements Domestic {}
class Cat extends Animal implements Domestic {}
Представьте себе dog
объект , созданный с помощью Object dog = new Dog()
, затем:
dog instanceof Domestic // true - Dog implements Domestic
dog instanceof Animal // true - Dog extends Animal
dog instanceof Dog // true - Dog is Dog
dog instanceof Object // true - Object is the parent type of all objects
Однако, с Object animal = new Animal();
,
animal instanceof Dog // false
, потому что Animal
является супертипом Dog
и, возможно, менее "изысканным".
И
dog instanceof Cat // does not even compile!
Это потому, что Dog
не является ни подтипом, ни супертипом Cat
, и он также не реализует его.
Обратите внимание, что переменная, используемая для dog
выше, имеет тип Object
. Это показывает, что instanceof
является операцией времени выполнения и приводит нас к / сценарию использования: , чтобы по-разному реагировать на тип объекта во время выполнения .
На заметку: expressionThatIsNull instanceof T
неверно для всех типов T
.
Удачного кодирования.