Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Прежде всего, мы можем хранить 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);

и результат равен "true"

Ответ 2

object instanceof object_interface даст true.

Ответ 3

Вы выполняете проверку 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.
    }
}

Ответ 4

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

Например:

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();
       }
  }

}

Ответ 5

hi Ниже приведено значение True для экземпляраOf:

•   If S is an ordinary (nonarray) class, then:
    •   If T is a class type, then S must be the same class as T, or S must be a subclass of T;
    •   If T is an interface type, then S must implement interface T.
•   If S is an interface type, then:
    •   If T is a class type, then T must be Object.
    •   If T is an interface type, then T must be the same interface as S or a superinterface of S.
•   If S is a class representing the array type SC[], that is, an array of components of type SC, then:
    •   If T is a class type, then T must be Object.
    •   If T is an interface type, then T must be one of the interfaces implemented by arrays (JLS §4.10.3).
•   If T is an array type TC[], that is, an array of components of type TC, then one of the following must be true:
         - TC and SC are the same primitive type. 
         - TC and SC are reference types, and type SC can be cast to TC by these run-time rules

Перейдите по этой ссылке, чтобы получить четкое представление:

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.instanceof

Ответ 6

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();
    }

}

Ответ 7

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

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

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

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

Ответ 8

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

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

Это все, что вам нужно.