2010-05-31 6 views

Répondre

9

if (clazz.getSuperclass() == Object.class)

Il y a 2 problèmes avec l'implémentation d'origine:

  1. getSuperclass peuvent retourner null et vous obtenez NPE lorsque vous appelez getName
  2. Vous utilisez l'égalité d'identité avec une chaîne (== au lieu de equals). Curieusement, cela peut fonctionner dans ce cas car la chaîne "java.lang.Object" est probablement intériorisée.
3

Que diriez-vous

if (clazz.getSuperclass().equals(java.lang.Object.class)) 
+5

Cela peut dérégler NPE si clazz est primitive ou 'java.lang.Object'. Probablement 'Object.class.equals (clazz.getSuperclass())' est plus robuste. De plus, 'java.lang.Class' est l'une des classes où il est possible d'utiliser la comparaison d'identité. –

+0

@Alexander, bon point, merci. Je n'étais pas vraiment sûr de l'identité de la comparaison, donc j'ai utilisé «d'égal à égal» - me faisant ainsi mordre dans l'autre jambe :-) –