Как instanceof будет работать на интерфейсе

instanceof может использоваться для проверки, является ли объект прямым или нисходящим экземпляром данного класса.instanceof может также использоваться с интерфейсами, хотя интерфейсы могутбыть создан как классы. Может кто-нибудь объяснить, какinstanceof работает?

Ответы на вопрос(7)

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

Еслиo instanceof t возвращаетсяtrue, затемt castedObj = (t) o; не будет бросатьClassCastException, а такжеcastedObj не будет .null

Это важно / полезно, если вы хотите получить доступ к полям или методам изcastedObj позже - вы знаете, что, делаяinstanceof проверьте, у вас никогда не будет проблем позже.

Единственным недостатком является то, что это может быть использовано для типов без обобщений.

instanceof проверкаreference противinstanceи проверяет типinstance этот конкретныйreference указывает на.

Теперь, так как вы можете создать ссылку наinterface, который указывает на случай реализацииclass (та же концепция, что иSuper class reference указывая наsubclass instance). Итак, вы можете сделатьinstanceof Проверь это.

Например:

public interface MyInterface {
}

class ImplClass implements MyInterface {

    public static void main(String[] args) {
        MyInterface obj = new ImplClass();

        System.out.println(obj instanceof ImplClass);   // Will print true.
    }
}
 José Ramón22 янв. 2014 г., 11:50
Какие? Конечно(obj instanceof ImplClass) == true, obj класс IS ImplClass! Вопрос в том,(obj instanceof MyInterface) == true? Я думаю этоопечатка. Объяснение немного сбивает с толку между-

 Прежде всего instanceof используется для сравнения того, имеет ли переменная ссылки на объект, содержащую объект, определенный тип или нет.

Например:-

public void getObj(Animal a){       // a is an Object Reference Variable of type Animal

    if(a instanceof Dog){


       }

}

 В случаеinterface,class которыйинвентарь это может быть использовано с.instanceof

Например:

public interface Brush{

  public void paint();
}

public class Strokes implements Brush{

       public void paint(){

          System.out.println("I am painting");

    }


}

public class Test{


  public static void main(String[] args){

          Brush b = new Strokes();

         if(b instanceof Strokes){


           b.paint();
       }
  }

}
public class Programmers {

    public static boolean hasReallife(Programmer programmer) {
        return programmer instanceof Reallife; ══════════════════╗
    }                                                            ║
                                                                 ║
}                                                                ║
                                                                 ▼
public class ReallifeProgrammer extends Programmer implements Reallife {

    public ReallifeProgrammer() {
        diseases.get("Obesity").heal();
        diseases.get("Perfectionism").heal();
        diseases.get("Agoraphobia").heal();
    }

    @Override
    public void goOut() {
        house.getPC().shutDown();
        wife.argue();
    }

    @Override
    public void doSports() {
        goOut();
        BigWideWorld.getGym("McFit").visit();
    }

    @Override
    public void meetFriends() {
        goOut();
        BigWideWorld.searchFriend().meet();
    }

}
 winklerrr24 мая 2017 г., 12:28
Хорошее искусство ascii!
Решение Вопроса

Прежде всего, мы можем хранитьinstances классов, реализующих конкретныйinterface вinterface reference variable как это.

package com.test;

public class Test implements Testeable {

    public static void main(String[] args) {

        Testeable testeable = new Test();

        // OR

        Test test = new Test();

        if (testeable instanceof Testeable)
            System.out.println("instanceof succeeded");
        if (test instanceof Testeable)
            System.out.println("instanceof succeeded");
    }
}

interface Testeable {

}

т. е. любой экземпляр времени выполнения, который реализует определенный интерфейс, пройдетinstanceof тестовое задание

РЕДАКТИРОВАТЬ

и выход

instanceof succeeded
instanceof succeeded

@RohitJain

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

Runnable runnable = new Runnable() {

    public void run() {
        System.out.println("inside run");
    }
};

и вы тестируете экземпляр типа интерфейс, используяinstanceof такой оператор

System.out.println(runnable instanceof Runnable);

и результатправда'

 Rohit Jain21 нояб. 2012 г., 08:15
@Sunil .. Ах, прости. На самом деле вы правы. Черт возьми, как я могу забыть это, даже если я реализовал это в моем недавнем проекте. В любом случае +1 за ваш ответ :)
 Rohit Jain21 нояб. 2012 г., 08:19
@Sunil .. Lol :) Я был глуп. Ура :)
 sunil21 нояб. 2012 г., 07:56
Нет .. вопрос был об использованииinstanceof противinterface, рт?
 Rohit Jain21 нояб. 2012 г., 07:59
@ Сунил .. Да, это правда. Но если вы проверитеinstanceof с интерфейсом вы всегда получите ложный результат. Поскольку вы не можете создать экземпляр интерфейса, он 'не имеет смысла проверять, указывает ли ссылка на его экземпляр. Я надеюсь, что вы получили то, что я хочу сказать.
 sunil21 нояб. 2012 г., 08:12
@RohitJain, пожалуйста, смотрите мой обновленный пост для ваших запросов. это неправдаinstanceof Оператор против интерфейса дастfalse всегда. пожалуйста, запустите мой образец
 sunil21 нояб. 2012 г., 08:17
@RohitJain приятно слышать, что вы поняли мою точку зрения. :)
 Pierre Henry03 дек. 2014 г., 14:23
Оператор instanceof немного ошибочно назван. Если вы думаете об этом как о значенииэто" вместо "это пример " это имеет больше смысла.
 ryvantage10 мая 2014 г., 20:30
@ RohitJain, не надоплохо себя чувствую Я'Я полностью с тобой. Я думаю, что это немного нелогично, чтоinstanceof возвращает true при реализации интерфейса. Мне кажется, что сказать объект, который реализуетSerializable является примеромSerializable класс неправильный. Тем не менее, важно определить, когда объект реализует определенный интерфейс, поэтому он пригодится независимо ...
 Rohit Jain21 нояб. 2012 г., 07:53
Ты наверное имел ввидуinstanceof Test в ваших условиях.

является ли первый аргумент объектом, реализующим второй аргумент. Не понимаю, почему так важно, что ты можешьt непосредственно создать экземпляр интерфейса.

Integer num = 1;
if (num instanceof Number) {
  System.out.println("An integer is a number!");
}

Тот'Все, что вам нужно.

 Amos M. Carpenter23 апр. 2014 г., 03:03
В вашем примере не хватает сути вопроса -Integer продолжается (не реализует).Number

object instanceof object_interface даст .true

Ваш ответ на вопрос