Как instanceof будет работать на интерфейсе
instanceof
может использоваться для проверки, является ли объект прямым или нисходящим экземпляром данного класса. instanceof
также может быть использован с интерфейсами, даже если интерфейсы не могут быть созданы, как классы. Может ли кто-нибудь объяснить, как instanceof
работает?
8 ответов
прежде всего, мы можем хранить 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 {
}
ie, любой экземпляр среды выполнения, реализующий определенный интерфейс, передаст instanceof
тест
редактировать
и вывода
instanceof succeeded
instanceof succeeded
@RohitJain
вы можете создавать экземпляры интерфейсов с помощью анонимных внутренних классов такой
Runnable runnable = new Runnable() {
public void run() {
System.out.println("inside run");
}
};
и вы испытываете экземпляр имеет тип interface, используя instanceof
оператор такой
System.out.println(runnable instanceof Runnable);
и результат "true"
ты 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.
}
}
- прежде всего 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();
}
}
}
hi приведенное ниже даст True для instanceOf:
• 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
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();
}
}
Я знаю, что это очень-очень старый вопрос со множеством ответов. Я просто хочу указать самый простой (по крайней мере, для меня) способ понять этого оператора.
если o instanceof t
возвращает true
, тогда
t castedObj = (t) o;
не бросят ClassCastException
и castedObj
не будет null
.
это важно/полезно, если вы хотите получить доступ к полям или методам из castedObj
позже - вы знаете, что делать instanceof
проверьте, у вас никогда не будет проблем позже.
единственным недостатком является то, что это можно использовать для типов без дженериков.
оператор instanceof сообщит вам, является ли первый аргумент объектом, реализующим второй аргумент. Не понимаю, почему это имеет значение, что вы не можете непосредственно создать экземпляр интерфейса.
Integer num = 1;
if (num instanceof Number) {
System.out.println("An integer is a number!");
}
Это все, что вам нужно.