reflexion method example ejemplos java reflection instanceof

method - reflection java stack overflow



¿Hay algo como instanceOf(Class<?> C) en Java? (7)

Quiero comprobar si un objeto o es una instancia de la clase c o de una subclase de c. Por ejemplo, si p es de la clase Point, quiero x.instanceOf (Point.class)

¿Um que? ¿Qué son o, p yx?

Quiero que funcione también para tipos primitivos. Por ejemplo, si x es un número entero, entonces x.instanceOf (Integer.class) y también x.instanceOf (Object.class) deberían ser verdaderas.

No. Ni siquiera debería compilar. Los primitivos no son objetos y no se pueden invocar métodos sobre ellos.

De todos modos, hay tres cosas, una de las cuales definitivamente puede lograr lo que desea (difieren un poco en dónde se aplica exactamente:

  • El operador instanceof si conoce la clase en tiempo de compilación.
  • Class.isInstance si desea verificar la clase de un objeto contra una clase desconocida en tiempo de compilación.
  • Class.isAssignableFrom() si desea verificar la asignabilidad de dos objetos de clase.

Quiero comprobar si un objeto o es una instancia de la clase C o de una subclase de C

Por ejemplo, si p es de clase Point , quiero que x.instanceOf(Point.class) sea true y también que x.instanceOf(Object.class) sea true .

Quiero que funcione también para los tipos primitivos en caja. Por ejemplo, si x es un Integer entonces x.instanceOf(Integer.class) debería ser true .

¿Hay tal cosa? Si no, ¿cómo puedo implementar tal método?


"Quiero que también funcione para tipos primitivos. Por ejemplo, si x es un número entero, entonces x.instanceOf (Integer.class) y también x.instanceOf (Object.class) deberían ser verdaderas".

¿Por qué? Los tipos primitivos y los tipos de referencia están completamente separados. Un primitivo int no es un subtipo de Entero ni Objeto. El tipo de un valor primitivo siempre se conoce estáticamente en tiempo de compilación, por lo que no tiene sentido probar su tipo. Claro, puede encajonar un valor primitivo y luego probar su tipo:

(Integer)5 instanceof Integer

Pero cuál sería el punto?


Creo que estás confundido acerca de instanceof para objetos crudos y genéricos

obj instanceof Class obj instanceof Class<?> // this is the one you want


De hecho, en Java hay un operador booleano llamado instanceof que se puede usar para determinar si un objeto es una instancia de una clase, una instancia de una subclase o una instancia de una clase que implementa una interfaz particular.

if(obj instanceof SomeClass) { // Do something }

El tutorial de Java tiene un buen ejemplo de este operador


Tu puedes hacer:

if (foo instanceof classNameYouWantToCheck)


Class.isInstance hace lo que quieres.

if (Point.class.isInstance(someObj)){ ... }

Por supuesto, no deberías usarlo si pudieras usar instanceof lugar, pero para escenarios de reflexión a menudo es útil.


x instanceof Integer x instanceof Object

solo tienes que usar la sintaxis correcta

para los tipos primitivos, tienes que hacerlo completamente diferente. Como no puede crear métodos para ellos, necesita una clase que mantenga el método. Entonces, en lugar de "x.instanceOf (Integer.Class)", debe llamar a "MyClassComparer.instanceOf (x, Integer.Class)" o algo así. Esto podría implementarse fácilmente mediante métodos de sobrecarga, pero no veo un caso en el que esa funcionalidad sea deseable en absoluto.