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

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?

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.

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 comstackr. 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 comstackción.
  • Class.isInstance () si desea verificar la clase de un objeto contra una clase desconocida en tiempo de comstackción.
  • Class.isAssignableFrom () si desea verificar la asignabilidad de dos objetos de clase.
 x instanceof Integer x instanceof Object 

solo tienes que usar la syntax 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.

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) 

“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 comstackció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 generics

 obj instanceof Class obj instanceof Class // this is the one you want