web-dev-qa-db-fra.com

Pourquoi Double.parseDouble (null) et Integer.parseInt (null) lisent différentes exceptions?

Pourquoi Double.parseDouble (null) et Integer.parseInt (null) lisent différentes exceptions?

Est-ce un accident historique ou intentionnel? La documentation indique clairement deux types d'exceptions pour Double.parseDouble(...) et un pour Integer.parseInt() , mais cela semble incohérent:

Integer.parseInt(null); // throws Java.lang.NumberFormatException: null

Toutefois

Double.parseDouble(null); // throws Java.lang.NullPointerException
90
pho79

Il est raisonnable de s’attendre à ce que les mêmes exceptions soient levées pour null; Cependant, ces API sont très anciennes et pourraient ne pas être modifiées à ce stade.

Et:

Étant donné que le comportement de l'exception a longtemps été spécifié dans JavaDoc, il est impossible de modifier le comportement de l'une ou l'autre méthode à ce stade. La fermeture ne résoudra pas le problème.

Comme tiré de: Rapport de bogue: Integer.parseInt () et Double.parseDouble () lèvent différentes exceptions sur null.

Comme d’autres l’ont dit: c’est probablement fait par différents auteurs.

66
Floris Velleman

Remarque: tout dans ce message est dans le code source de Java7-b147

Double.parseDouble() entre dans une bibliothèque Sun (dans Sun.misc.FloatingDecimal ) la première chose importante à faire est que:

in = in.trim(); // don't fool around with white space.
                // throws NullPointerException if null

Integer.parseInt() est fait manuellement dans la classe Integer . La première chose importante qui se passe est:

if (s == null) {
    throw new NumberFormatException("null");
}

Je suppose qu'il y a deux auteurs différents.

59
durron597