2011-04-02 8 views
7
public boolean isUserControled(){  
     return action.getClass().getSuperclass().toString().equals("class logic.UserBehaviour"); 
} 

Creo que este fragmento de código es bastante autoexplicativo. ¿Hay alguna forma más inteligente de hacer esto?Manera inteligente de verificar la superclase

Gracias

Respuesta

9

A menos que específicamente desea comprobar sólo el primer superclase, sería mejor utilizar:

return (action instanceof logic.UserBehavior); 

Su método sería mejor con esto:

action.getClass().getSuperClass().name().equals("logic.UserBehavior"); 

La llamada a toString() es no es la mejor idea

O mejor aún, tal como fue anunciado por Ulrik:

action.getClass().getSuperClass() == logic.UserBehavior.class 
+0

"nombre de la igualdad" no es estrictamente correcto más simple y mejor con '==' (ver la respuesta de Ulrik) – irreputable

+0

Estoy de acuerdo y no lo había pensado al principio, (+1) ya había respondido. – Mat

11

(action instanceof logic.UserBehaviour) devolverá TRUE si la acción es un objeto de un tipo que se extiende UserBehavior.

Un extracto de http://download.oracle.com/javase/tutorial/java/nutsandbolts/op2.html

El Tipo de Operador de comparación instanceof

El operador instanceof compara un objeto a un tipo especificado. Puede usarlo para probar 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 .

El siguiente programa, InstanceofDemo, define una clase padre (el nombre de los padres), una interfaz sencilla (llamado MyInterface), y una clase hija (llamado niño) que se hereda de los padres e implementa la interfaz.

class InstanceofDemo { 
    public static void main(String[] args) { 

    Parent obj1 = new Parent(); 
    Parent obj2 = new Child(); 

    System.out.println("obj1 instanceof Parent: " + (obj1 instanceof Parent)); 
    System.out.println("obj1 instanceof Child: " + (obj1 instanceof Child)); 
    System.out.println("obj1 instanceof MyInterface: " + (obj1 instanceof MyInterface)); 
    System.out.println("obj2 instanceof Parent: " + (obj2 instanceof Parent)); 
    System.out.println("obj2 instanceof Child: " + (obj2 instanceof Child)); 
    System.out.println("obj2 instanceof MyInterface: " + (obj2 instanceof MyInterface)); 
    } 
} 

class Parent{} 
class Child extends Parent implements MyInterface{} 
interface MyInterface{} 

Salida:

obj1 instanceof Parent: true 
obj1 instanceof Child: false 
obj1 instanceof MyInterface: false 
obj2 instanceof Parent: true 
obj2 instanceof Child: true 
obj2 instanceof MyInterface: true 

Cuando se utiliza el operador instanceof, tenga en cuenta que nulo no es una instancia de cualquier cosa.

5

Si desea comprobar sólo el primer superclase:

return action.getClass().getSuperclass() == logic.UserBehavior.class; 

lo contrario:

return (action instanceof logic.UserBehaviour); 
Cuestiones relacionadas