2011-04-02 5 views

Répondre

9

Sauf si vous voulez spécifiquement vérifier que la première superclasse, il serait préférable d'utiliser:

return (action instanceof logic.UserBehavior); 

Votre méthode serait mieux avec ceci:

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

L'appel à toString() est pas la meilleure idée.

Ou mieux encore, telle que publiée par Ulrik:

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

"nom égal" n'est pas strictement correct. plus simple et mieux avec '==' (voir la réponse d'Ulrik) – irreputable

+0

Je suis d'accord et je n'avais pas d'idée à ce sujet au début, (+1) 'd sa réponse déjà. – Mat

11

(action instanceof logic.UserBehaviour) retourne vrai si l'action est un objet d'un type qui s'étend UserBehavior.

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

Le type Opérateur de comparaison instanceof

L'opérateur instanceof compare un objet à un type spécifié. Vous pouvez l'utiliser pour tester si un objet est une instance d'une classe, une instance d'une sous-classe ou une instance d'une classe qui implémente une interface particulière.

Le programme suivant, InstanceofDemo, définit une classe parente (appelée mère), une interface simple (du nom MyInterface), et une classe enfant (nom enfant) qui hérite de la mère et implémente l'interface.

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{} 

Sortie:

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

Lorsque vous utilisez l'opérateur instanceof, gardez à l'esprit que nul n'est pas une instance de quoi que ce soit.

5

Si vous voulez vérifier que la première superclasse:

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

Sinon:

return (action instanceof logic.UserBehaviour); 
Questions connexes