una saber objeto interfaz instanciado implementa esta clase casteo java instanceof

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

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 la instanceof expresión nunca podría ser cierto.

La expresión relacional es el primer operando de instanceof y ReferenceType es el segundo.