interfaz - saber si un objeto esta instanciado java
instanceof en Java-¿por qué no se compila esto? (2)
Además de la respuesta de arshajii, si desea evitar el error en tiempo de compilación y desea un resultado verdadero / falso en tiempo de ejecución para verificar si var es una instancia de Character , use un código como este:
if(var.getClass().isAssignableFrom(Character.class))
System.out.println("var is a Character");
else
System.out.println("var is NOT a Character");
Como era de esperar se imprimirá:
var is NOT a Character
Esta pregunta ya tiene una respuesta aquí:
class A {
public static void main(String...args) {
Integer var = 10;
if(var instanceof Character) // Line1
System.out.println("var is a Character");
}
}
Sé que la línea 1 no se compilará porque el compilador ha encontrado que var
no es un Character
.
Lo que no entiendo es por qué el compilador produce un error en lugar de devolver false
o true
.
Si el compilador devuelve false
o true
(es decir, trata la instanceof
operación como una validación basada en if), entonces sería mucho más útil ... ¿no es así?
¿O me falta algo obvio?
Es un error de compilación de acuerdo con JLS §15.20.2 :
Si una conversión de la expresión relacional al tipo de referencia se rechazara como un error en tiempo de compilación, entonces la
instanceof
expresión relacional también produce un error en tiempo de compilación. En tal situación, el resultado de lainstanceof
expresión nunca podría ser cierto.
La expresión relacional es el primer operando de instanceof
y ReferenceType es el segundo.