Si vous exécutez le code suivant,
Exception in thread "main" java.lang.NullPointerException at Foo.main(Foo.java:3)
6 Réponses :
Je ne sais pas ce que l'IDE utilisez-vous, mais Eclipse a une option pour permettre l'avertissement sur les conversions de boxe et de transbording. Il n'est pas possible de le détecter en tant qu'accès de pointeur NULL, puisque NULL n'est pas immédiatement inscrit, mais via L'expression de type entier est non constituée dans Int bar.getid () code>. P>.
Foo.java ligne 3 p>
blockQuote>
J'utilise Eclipse depuis environ 3 ans et je ne le savais pas! Doux!
Il est ennuyant que Eclipse ne puisse pas activer les avertissements de non-boîte sans la boxe! bugs.eclipse.org/bugs/show_bug.cgi?id=163065
Si vous essayez d'utiliser n'importe quelle méthode sur un Autounboxing est implémenté avec le J'espère que cela vous aide! P> NULL code> ou faites tout ce qui n'a aucun sens avec un
null code>, il jette un
nullpointeexception code> . P>
[objet integer] .IntValue () code> méthode (ou similaire), de sorte qu'il jette un
nullpointerexception code> car vous ne pouvez pas avoir
null code> invoquer une méthode. p>
Au lieu de cela, une bonne pratique est de vérifier NULL avant de non-goûter. P> < Pré> xxx pré> p> nullpointeException code> est un
RunTimeException code> que l'IDE ne peut pas détecter lors de la compilation du code.
semble être une exception de temps d'exécution parfaitement raisonnable. Si votre code principal était:
private static class Bar{ private final int id; public Bar(){ this(0); } public Bar(int id){ this.id = id; } public int getId(){ return id; } }
Je n'ai pas dit que l'exception était déraisonnable, j'ai dit que c'était inattendu, d'autant plus que mon IDE a choisi de l'ignorer par défaut.
Ok, j'essayais de me contenter de ce qui est "attendu" et "inattendu". C'est une exception de temps d'exécution, pas quelque chose qui peut être nécessairement déterminé à partir d'une analyse statique. Comment vous attendez-vous à ce que l'IDE se comporte dans cette situation?
Je m'attendais à ce que l'IDE me prénome au moins par défaut. Comme je l'ai dit, je pense que c'est une exception d'exécution assez subtile.
Vous vous attendriez à déterminer toutes les situations où vous pourriez avoir une période d'exécution NPE? Cela me frappe comme couru contre le théorème de Gödel. Mais je recommande d'éviter la classe entière lorsque vous n'en avez pas besoin.
Non, vous êtes hyperbolique. Je ne m'attendrais pas à ce qu'il représente pour tous les scénarios. Mais il semble que les autres pensaient la même chose depuis que Eclipse fournit une telle fonctionnalité en matière de boxe / de construction.
Désolé pour aller hyperbolique, vous avez raison. Donc, l'avertissement que vous voulez est simplement que cela fait un type en ligne d'un entier à un int? Je suppose que Eclipse peut le faire pour vous comme un avertissement.
Il semble que ce comportement soit documenté dans le JDK ™ 5.0 Documentation , P>
.. Vous pouvez ignorer largement la distinction entre
int code> et
entier code>, avec quelques mises en garde. Un
Integer code> expression peut avoir une valeur null. Si votre Programme essaie de Autounbox NULL, il lancera un
nullpointException code>. p> blockQuote>
La boxe n'est rien de plus que le sucre syntaxiste pour casser un objet comme entier à la équivalent natif 'int'. Les autochtones ne peuvent pas être nuls mais les objets peuvent. Le mécanisme de boxe n'empêchera pas NullpointerExceptions dans ces cas. p>
Je ne comprends pas. Demandez-vous pourquoi la NPE arrive ou c'est juste une déclaration? Quelle serait la question de réponse spécifique?