2012-06-14 6 views
0

Je pensais que ce code ajouterait un objet aux vecteurs appropriés, mais j'obtiens une exception de pointeur nul. Je sais que Actor a existe, car actors.add(a) fonctionne comme prévu. J'ai recherché comment tester si un objet implémente une interface, mais tous les exemples que j'ai pu trouver détaillés comment appeler une méthode de l'interface, au lieu d'appeler une méthode qui nécessite une instance de cette interface.Pourquoi ce code ne vérifie-t-il pas l'interface correctement?

public void addActor(Actor a) { 
    actors.add(a); // actors is a vector 
    if (a instanceof Drawable) { 
     panel.addDrawable((Drawable) a); 
    } 
} 

Et dans le panneau:

public void addDrawable(Drawable d) { 
    images.add(d); // images is a vector 
} 
+4

Vous pouvez ajouter une valeur nulle aux vecteurs. –

+1

Je ne peux pas dire quelle est la question - que voulez-vous dire par "appeler une méthode d'une interface au lieu d'appeler une méthode qui nécessite une instance de cette interface"? –

+1

La seule place possible pour le NPE que vous obtenez est (si vous dites que vous êtes positif, l'acteur a n'est pas nul, alors la ligne 'panel.addDrawable ((Drawable) a);' doit l'être. ' panel' doit être nul, sauf s'il y a un autre code que vous ne nous montrez pas.L'exception elle-même serait bien – Austin

Répondre

1

Je reçois une exception de pointeur nul. Je sais que Actor a existe, car actors.add(a) fonctionne comme prévu.

Vector.add(null) n'élèvera pas NullPointerException. Le javadoc dit

public boolean contains(Object o)

Retours true si ce vecteur contient l'élément spécifié. Plus formellement, renvoie vrai si et seulement si ce vecteur contient au moins un élément e tel que (o==null ? e==null : o.equals(e)).

+0

Oh, merci, mais maintenant je suis seulement l'appeler avec 'addActor (new Square());', donc je ne vois pas comment cela pourrait vraiment être le problème.Et quand je supprime le code référençant l'interface et ajouter des tests System.out.println, tout a l'air d'être – ChemicalRocketeer

+1

@Techni, Si la pile supérieure de votre NPE est dans cette méthode, alors 'actors' ou' panel' est 'null'. –

Questions connexes