java - Cómo funciona instanceof en una interfaz
interface (8)
instanceof
se puede usar para probar si un objeto es una instancia directa o descendiente de una clase dada. instanceof
también se puede usar con interfaces aunque las interfaces no se puedan instanciar como clases. ¿Alguien puede explicar cómo funciona instanceof
?
El operador instanceof le dirá si el primer argumento es un objeto que implementa el segundo argumento. No entiendo por qué importaría que no pueda crear una instancia directa de la interfaz.
Integer num = 1;
if (num instanceof Number) {
System.out.println("An integer is a number!");
}
Eso es todo lo que necesitas.
En primer lugar, podemos almacenar instances
de clases que implementen una interface
particular en una interface reference variable
como esta.
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 {
}
es decir, cualquier instancia de tiempo de ejecución que implemente una interfaz particular pasará la instanceof
prueba
EDITAR
y la salida
instanceof succeeded
instanceof succeeded
@RohitJain
Puede crear instancias de interfaces utilizando clases internas anónimas como esta
Runnable runnable = new Runnable() {
public void run() {
System.out.println("inside run");
}
};
y prueba la instancia es de tipo interfaz, utilizando el operador instanceof
como este
System.out.println(runnable instanceof Runnable);
y el resultado es "verdadero"
Hace una instanceof
verificación de una reference
en una instance
y comprueba el tipo de instance
que apunta la reference
particular.
Ahora, ya que puede crear una referencia de una interface
, que apunta a una instancia de implementación de class
(mismo concepto que, Super class reference
apunta a la subclass instance
). Por lo tanto, puede hacer una instanceof
verificación en él.
Por ejemplo: -
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.
}
}
Sé que esta es una pregunta muy antigua con muchas buenas respuestas. Solo quiero señalar la forma más fácil (al menos es más fácil para mí) de comprender a este operador.
Si o instanceof t
devuelve true
, entonces t castedObj = (t) o;
no lanzará ClassCastException
, y castedObj
no será null
.
Esto es importante / útil si desea acceder a los campos o métodos de castedObj
más adelante; usted sabe que al realizar la instanceof
verificación, nunca más tendrá problemas.
El único inconveniente es que esto se puede usar para tipos sin genéricos.
hola Lo siguiente arrojará True para la instancia de:
• 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
Por favor, vaya a este enlace para tener una idea clara:
http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.instanceof
object instanceof object_interface
dará true
.
- En primer lugar, instanceof se utiliza para comparar si la variable de referencia de objeto que contiene el objeto es de cierto tipo o no.
P.ej:
public void getObj(Animal a){ // a is an Object Reference Variable of type Animal
if(a instanceof Dog){
}
}
- En el caso de la interface
, la class
que la implementa se puede usar con instanceof
.
P.ej:
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();
}
}