Quiero comprobar si un objeto oes una instancia de la clase Co de una subclase de C.
Por ejemplo, si pes de la clase Pointquiero x.instanceOf(Point.class)ser truey también x.instanceOf(Object.class)ser true.
Quiero que funcione también para tipos primitivos en caja. Por ejemplo, si xes un Integerentonces x.instanceOf(Integer.class)debería ser true.
¿Existe tal cosa? Si no es así, ¿cómo puedo implementar tal método?
java
reflection
instanceof
Snakile
fuente
fuente

Respuestas:
Class.isInstance hace lo que quiere.
if (Point.class.isInstance(someObj)){ ... }Por supuesto, no debería usarlo si pudiera usarlo
instanceofen su lugar, pero para escenarios de reflexión a menudo es útil.fuente
if (a instanceof Point), pero lo haces de una manera más complicada, quien lea el código seguramente pensará "oh, tiene que haber una razón para que esto se haga de la manera difícil", y luego vaya a los documentos para averiguar en qué seClass.isInstancediferencia deinstanceof. Pierdes el tiempo de tus compañeros.¿Um que? ¿Qué son o, p y x?
No. Ni siquiera debería compilarse. Los primitivos no son objetos y no puede llamar a métodos sobre ellos.
De todos modos, hay tres cosas, una de las cuales definitivamente puede lograr lo que quieres (difieren un poco en dónde exactamente se aplican:
instanceofoperador si conoce la clase en tiempo de compilación.fuente
x instanceof Integer x instanceof Objectsolo tienes que usar la sintaxis correcta
para los tipos primitivos, tienes que hacerlo completamente diferente. Dado que 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.
fuente
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 en particular.
if(obj instanceof SomeClass) { // Do something }El tutorial de Java tiene un buen ejemplo de este operador
fuente
Tu puedes hacer:
if (foo instanceof classNameYouWantToCheck)fuente
"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".
¿Por qué? Los tipos primitivos y los tipos de referencia están completamente separados. Un int primitivo no es un subtipo de Integer ni Object. 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 enmarcar un valor primitivo y luego probar su tipo:
(Integer)5 instanceof IntegerPero cuál sería el punto?
fuente
Creo que estás confundido acerca de instanceof para objetos sin formato y genéricos
obj instanceof Class obj instanceof Class<?> // this is the one you wantfuente
instanceof.