Re: Une bien étrange NPE.

Jean-Baptiste BRIAUD -- Novlog <[email protected]> Fri, 15 Apr 2011 22:31:39 +0200
Newsgroups gmane.comp.java.french.general
Message-ID <[email protected]>
Juste un élément que j'ai oublié :

Voici la ligne 2 : Integer i = (b ? 40 : a.n())

Le Integer i devant donner le signal pour l'autoboxing.
visiblement, la partie compila time dispose bien de l'info, mais @runtime, çà plante.
Que çà plante ne me gène pas tellement, ce qui est troublant, c'est le type de l'exception.
Pourquoi une NPE ?


On 15 avr. 2011, at 22:06, Jean-Baptiste BRIAUD -- Novlog wrote:

> Bonjour à tous,
> 
> Ca faisait très très longtemps que je n'avais pas eu de problème de ce genre.
> 
> Une NPE.
> Jusque là, rien à dire.
> J'investige ... et voici ce que je trouve (conceptuellement).
> 
> ligne 1 : a.m();
> ligne 2 : a.n();
> 
> Or la NPE est à la ligne 2 !
> Donc a est nul, mais la ligne 1 est passé.
> 
> Maintenant voici le détail de la ligne 2 : b ? 40 : a.n()
> 
> La méthode n retourne un Integer... sauf que 40 est un int, pas un Integer.
> Résultat, çà passe la compile depuis l'autoboxing, mais visiblement pas le runtime.
> 
> Correction de la ligne 2 : b ? new Integer(40) : a.n()
> Comme au bon vieux temps, sans autoboxing ... et çà passe.
> 
> Etrange, non ? Serait-ce un bon puzzle ? 
> Je suis en 1.6.