Inkonsequent?

Status
Nicht offen für weitere Antworten.

meez

Top Contributor
Was meint ihr dazu...

Code:
int i = Integer.parseInt(null);
Wirft eine NumberFormatException...

Code:
double d = Double.parseDouble(null);
Wirft eine NullPointerException...

Gut so, oder inkonsequent, da die NullPointerException nicht gewrappt wird...?
 

Isaac

Bekanntes Mitglied
Ist mir noch nie aufgefallen )

Aber ja, inkonsequent. Es gibt keinen Grund, der mir bekannt wäre, es bei Integer und Double auf 2 verschiedene Art und Weisen zun händeln.

Warscheinlich haben die Methoden einfach 2 verschiedene Coder geschrieben und die Vorschrift war wie Exceptions zu werfen sind war zweideutig.

Oder es gibt einen Grund den ich nicht kenne.
 

dotlens

Top Contributor
Integer fängt das null selbst ab:
Code:
if (s == null) {
            throw new NumberFormatException("null");
        }
während Double bloss eine Funktion für Fliesskomazahlen aufruft.
(readJavaFormatString(String in) der Klasse FloatingDecimal)

Diese Funktion fängt das null nicht ab.

Wenn nun die Runetime auf ein Objekt zugreift (wie bei Double mit in.trim()) und das Objekt null ist, wirft sie von sich aus eine Nullpointer Exception.

hoffe das war verständlich :D

Der Autor war sich dessen bewusst, hat das auch im Komentar vermerkt. Wieso er das allerdings so handhaben wollte weiss ich nicht.
Fliesskomazahlern fangen wohl null nicht auf und geben daher eine Nullpointer Exception während bei Integer das null aufgefangen wird, aber eine Numberformat Exception geworfen wird....
 

Grizzly

Top Contributor
@meez:
An Deiner Stelle würde ich mir darüber keine Gedanken machen. Die ganze Java API ist voll von so komischen Sachen. Ich finde es sehr interessant, dass sich Sun nicht an ihre eigenen Empfehlungen für Java Code halten.
 

meez

Top Contributor
dotlens hat gesagt.:
Wenn nun die Runetime auf ein Objekt zugreift (wie bei Double mit in.trim()) und das Objekt null ist, wirft sie von sich aus eine Nullpointer Exception.

Vielen Dank für die Aufklärung...Endlich weiss ich wie eine NullPointerException zustande kommt...;)
Wobei du recht hast mit dem Kommentar...Es ist ihm tatseachlich bewusst...

FloatingDecimal.class
Code:
 parseNumber:
	try{
	    in = in.trim(); // don't fool around with white space.
	                    // throws NullPointerException if null


Grizzly hat gesagt.:
An Deiner Stelle würde ich mir darüber keine Gedanken machen. Die ganze Java API ist voll von so komischen Sachen.

Yep...Aber genau um solche Sachen zu diskutieren ist dieses Forum ja gut... (Zudem hilfts vielleicht mal dem ein oder anderen, wenn er eine NPE hat)...
 

Sky

Top Contributor
Also, ich finde das Verhalten auch ein wenig inkonsequent. Vor allem, wenn man die API liest, würde man nicht darauf kommen, dass sich das Verhalten unterscheidet:

API zu Integer hat gesagt.:
public static int parseInt(String s) throws NumberFormatException [...]
Throws: NumberFormatException - if the string does not contain a parsable integer.

API zu Double hat gesagt.:
public static double parseDouble(String s) throws NumberFormatException [...]
Throws: NumberFormatException - if the string does not contain a parsable double.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben