Не могу понять зачем нужно это ключевое слово. Объясните на примере, пожалуйста.
Допустим, у меня есть метод, в который можно передать объект любого типа.
void foo(Object o){
//?
}
И я хочу проверить к какому типу относится объект. Наверное, я не правильно понял суть instanceof. Но, все же напишу как считаю
if(o instanceof Integer){
//Your logic
}
Если понял правильно, то объясните, можно ли воспользоваться instanceof для развлетвения switch/case?
Также если понял верно, объясните пожалуйста, зачем он нужен, если можно создать несколько методов для разной логики?
Всё просто: o instanceof Integer просто проверяет, является ли реальный тип объекта o типом Integer.
Вы и правда можете создать несколько методов для вашей логики, один для Integer, другой для String. Но если к вам приходит Object, вы не сможете вызвать нужный метод, потому что не знаете, какого реально типа ваш объект. Вот для того, чтобы это выяснить, и нужен instanceof.
Кстати, использовать конструкцию switch с instanceof не выйдет, switch требует примитивные типы или String*. Но вы можете написать цепочку if'ов:
if (x instanceof Integer) {
// что-то сделать с (Integer)x
} else if (x instanceof String) {
// что-то сделать с (String)x
} else {
// ну не шмагла я определить тип
}
В правильной, хорошо написанной программе, количество instanceof и подобых конструкций обычно невелико: имеет смысл избегать передачи нетипизированных объектов (например, параметров типа Object), а там, где код должен работать с параметрами различного типа, использовать дженерики. Однако иногда приходится пользоваться подходом с instanceof, например, при взаимодействии с API, которое было написано ещё до прихода дженериков.
Ещё по теме:
*Или enum, или врапперы на примитивные типы наподобие Character.
Продвижение своими сайтами как стратегия роста и независимости