2010-04-23 10 views
20

Im anulando un método equals() y necesito saber si el objeto es una instancia de la subclase de un evento (Event es la superclase). Quiero algo como "obj subclassof Event". ¿Cómo se puede hacer esto?Java: ¿hay una "subclase" como instanceof?

¡Gracias de antemano!

+10

¿Qué pasa con 'instanceof' la que le hizo esta pregunta? Por favor, publique un código con sus intentos, expectativas y expectativas. – BalusC

Respuesta

41

instanceof puede manejar eso muy bien.

+1

Sí, 'if (mysubclass instanceof Event) // se vuelve loco ...' – Paolo

+1

Menos mal que incluso no tiene que verificar' null' –

0

Si obj es una subclase de Evento, entonces es una instancia de. obj es una instancia de cada clase/interfaz de la que deriva. Entonces, como mínimo, todos los objetos son instancias de Object.

1

No hay un método directo en Java para verificar la subclase. instanceof Event sería volver cierto para cualquier clase de objetos de sub

El que podría hacer getClass() sobre el objeto y luego usar getSuperclass() método de Class objeto de comprobar si superclase es Event.

2

Es posible que desee ver en someObject.getClass().isAssignableFrom(otherObject.getClass());

+0

Eso solo es útil si solo tiene información de clase. Pero en el 'igual()' tienes las ** instancias ** de tu disponibilidad. – BalusC

+0

Sí, tienes razón. Usé la palabra "poder" por una razón. p.ej. Escribir un método reutilizable "equalsHelper" que haga algunas verificaciones preliminares por usted. La información correcta ya había sido publicada, así que solo quería agregar alguna otra consideración. – z5h

31

Con el siguiente código se puede comprobar si un objeto es una clase que se extiende de eventos, pero no es instancia de clase AB evento en sí.

if(myObject instanceof Event && myObject.getClass() != Event.class) { 
    // then I'm an instance of a subclass of Event, but not Event itself 
} 

Por defecto instanceof de verificación si un objeto es de la clase especificada o una subclase (se extiende o implementos) en cualquier nivel de Evento.

+0

Supongo que tuvimos la misma idea, pero primero llegó aquí. –

+1

¿Por qué, señor? :-) La otra forma de hacerlo es hacer un resumen del evento, o una interfaz, y no molestarse en verificar que su objeto sea específicamente una instancia de él, porque no puede ser. – Adrian

9

Realmente instanceof debe ser lo suficientemente bueno, pero si quiere estar seguro de la clase es en realidad una sub-clase, entonces podría proporcionar la comprobación de esta manera:

if (object instanceof Event && object.getClass() != Event.class) { 
    // is a sub-class only 
} 

Desde Adrian era un poco por delante de mí , También agregaré una forma de hacerlo con un método de propósito general.

public static boolean isSubClassOnly(Class clazz, Object o) { 
    return o != null && clazz.isAssignableFrom(o) && o.getClass() != clazz; 
} 

Utilice esta por:

if (isSubClassOnly(Event.class, object)) { 
    // Sub-class only 
} 
+0

Quizás también tenga ... && clazz! = Null && ... ¿solo para completarlo? : D – Paggas

+1

@Paggas: Considero un error de programación y, por lo tanto, quiero tener la NullPointerException. Básicamente no es posible tener 'object instanceof null' así que ¿por qué permitir' isSubClassOnly (null, object) '. –

Cuestiones relacionadas