Для чего используется оператор instanceof в Java? - PullRequest
152 голосов
/ 06 сентября 2011

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

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

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

Ответы [ 15 ]

0 голосов
/ 10 февраля 2017

Оператор instanceof используется для проверки того, является ли объект экземпляром указанного типа.(класс или подкласс или интерфейс).

instanceof также известен как оператор сравнения типов, поскольку он сравнивает экземпляр с типом.Он возвращает либо true, либо false.

class Simple1 {  
public static void main(String args[]) {  
Simple1 s=new Simple1();  
System.out.println(s instanceof Simple1); //true  
}  
}  

Если мы применим оператор instanceof к любой переменной, имеющей нулевое значение, он возвращает false.

0 голосов
/ 27 июля 2016

Экземпляр ключевого слова полезен, когда вы хотите узнать экземпляр конкретного объекта.

Предположим, что вы выбросили исключение, и когда у вас есть catch, затем выполните пользовательскую операцию sum, а затем снова продолжите согласно вашей логике (throws или log etc)

Пример: 1) Пользователь создал пользовательское исключение «InvalidExtensionsException» и выбросил его согласно логике

2) Теперь в блоке catch поймать (исключение е) { выполнить логику суммирования, если тип исключения "InvalidExtensionsException"

InvalidExtensionsException InvalidException =(InvalidExtensionsException)e;

3) Если вы не проверяете экземпляр, а типом исключения является исключение нулевого указателя, ваш код сломается.

Так что ваша логика должна быть внутри экземпляра if (например, InvalidExtensionsException) { InvalidExtensionsException InvalidException = (InvalidExtensionsException) e; }

Выше приведен пример неправильной практики кодирования. Однако этот пример поможет вам понять использование его экземпляра.

0 голосов
/ 06 мая 2016

Вы можете использовать Map для создания более высокой абстракции на экземпляре

private final Map<Class, Consumer<String>> actions = new HashMap<>();

Затем, имея такую ​​карту, добавьте к ней действие:

actions.put(String.class, new Consumer<String>() {
        @Override
        public void accept(String s) {
           System.out.println("action for String");       
        }
    };

Тогда, имея Объект неизвестного типа, вы можете получить определенное действие с этой карты:

actions.get(someObject).accept(someObject)
0 голосов
/ 06 сентября 2011

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

http://download.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

0 голосов
/ 06 сентября 2011

Пример очень простого кода:

If (object1 instanceof Class1) {
   // do something
} else if (object1 instanceof Class2) {
   // do something different
}

Будьте осторожны.В приведенном выше примере, если Class1 - Object, первое сравнение всегда будет истинным.Так что, как с исключениями, иерархический порядок имеет значение!

...