Вопрос-ответ

What is the 'instanceof' operator used for in Java?

Для чего используется оператор 'instanceof' в Java?

Для чего используется оператор instanceof? Я видел такие вещи, как

if (source instanceof Button) {
//...
} else {
//...
}

Но для меня все это не имело смысла. Я провел свое исследование, но нашел только примеры без каких-либо объяснений.

Переведено автоматически
Ответ 1

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 имеет значение false для всех типов T.

Ответ 2

Это оператор, который возвращает true, если левая часть выражения является экземпляром имени класса в правой части.

Подумайте об этом так. Допустим, все дома в вашем квартале были построены по одним и тем же чертежам. Десять домов (объектов), один набор чертежей (определение класса).

instanceof это полезный инструмент, когда у вас есть коллекция объектов, но вы не уверены, что это такое. Допустим, у вас есть коллекция элементов управления в форме. Вы хотите прочитать проверенное состояние любых установленных флажков, но вы не можете запросить у простого старого объекта его проверенное состояние. Вместо этого вы увидите, является ли каждый объект флажком, и если это так, приведите его к флажку и проверьте его свойства.

if (obj instanceof Checkbox)
{
Checkbox cb = (Checkbox)obj;
boolean state = cb.getState();
}
Ответ 3

Как описано на этом сайте:


Оператор instanceof можно использовать для проверки, относится ли объект к определенному типу...


if (objectReference instanceof type)

Краткий пример:


String s = "Hello World!"
return s instanceof String;
//result --> true

Однако применение instanceof к нулевой ссылочной переменной / выражению
возвращает false .


String s = null;
return s instanceof String;
//result --> false

Поскольку подкласс является "типом" своего суперкласса, вы можете использовать
instanceof для проверки этого...


class Parent {
public Parent() {}
}

class Child extends Parent {
public Child() {
super();
}
}

public class Main {
public static void main(String[] args) {
Child child = new Child();
System.out.println( child instanceof Parent );
}
}
//result --> true

Надеюсь, это поможет!

Ответ 4

Этот оператор позволяет определить тип объекта. Он возвращает boolean значение.

Например

package test;

import java.util.Date;
import java.util.Map;
import java.util.HashMap;

public class instanceoftest
{
public static void main(String args[])
{
Map m=new HashMap();
System.out.println("Returns a boolean value "+(m instanceof Map));
System.out.println("Returns a boolean value "+(m instanceof HashMap));
System.out.println("Returns a boolean value "+(m instanceof Object));
System.out.println("Returns a boolean value "+(m instanceof Date));
}
}

вывод таков:

Returns a boolean value true
Returns a boolean value true
Returns a boolean value true
Returns a boolean value false
java