utiliza significa que para operadores operador librería jerarquia ejemplo comparacion java instanceof cloneable

java - significa - instanceof-tipos de operandos condicionales incompatibles



para que se utiliza el operador instanceof (3)

Lo siguiente compila bien:

Object o = new Object(); System.out.println(o instanceof Cloneable);

Pero esto no:

String s = new String(); System.out.println(s instanceof Cloneable);

Se genera un error de compilación.

¿Cuál es el problema?


El compilador sabe que String es una clase final y no implementa Cloneable . Por lo tanto, ninguna instancia de String puede ser una instancia de Cloneable . Te está impidiendo pensar que tienes una prueba significativa cuando en realidad siempre imprimirá "falso".


Un problema relacionado que me he encontrado recientemente (y que me llevó a esta página, antes de descubrir lo que estaba pasando) es que el entorno Eclipse puede informar "tipos de operando condicionales incompatibles" en una expresión ''instancia de'' erróneamente debido a un Falta la declaración de ''importación'' para el tipo a la derecha de la ''instancia de''. Pasé un tiempo tratando de descubrir cómo los tipos en cuestión podrían ser incompatibles antes de descubrir que una importación faltante estaba causando todo el problema. Con suerte, esta información le ahorrará a alguien algo de tiempo.


Una encarnación más evidente de su problema es la siguiente:

if ("foo" instanceof Number) // "Incompatible conditional operand types String and Number"

Esto se especifica en JLS 15.20.2 instanceof operador de comparación de tipo :

RelationalExpression: RelationalExpression instanceof ReferenceType

Si un molde de RelationalExpression para el ReferenceType se rechazaría como un error en tiempo de compilación, 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.

Es decir, dado que esta expresión de conversión genera un error de tiempo de compilación:

(Number) "foo"

así debe esta expresión:

("foo" instanceof Number)

Su caso es un poco más sutil, pero el principio es el mismo:

  • String es una clase final
  • String no implementa Cloneable
  • Por lo tanto, no se puede hacer (Cloneable) aString
  • Por lo tanto, tampoco puede hacer una aString instanceof Cloneable