web-dev-qa-db-ja.com

Double.parseDouble(null)とInteger.parseInt(null)が異なる例外をスローするのはなぜですか?

Double.parseDouble(null)とInteger.parseInt(null)が異なる例外をスローするのはなぜですか?

これは歴史的な事故ですか、それとも意図的なものですか?ドキュメンテーションには、2つのタイプの例外が Double.parseDouble(...) と1つ Integer.parseInt() に明確に記載されていますが、一貫性がないようです。

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

しかしながら

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

Nullに対して同じ例外がスローされることを期待するのは理にかなっています。ただし、これらのAPIは非常に古く、この時点で変更できない場合があります。

そして:

例外の動作は長年にわたるものであり、JavaDocで指定されているため、この時点でいずれかのメソッドの動作を変更することは実用的ではありません。修正しないので閉じる。

バグレポート:Integer.parseInt()とDouble.parseDouble()は、nullで異なる例外をスローします。

他の人が述べたように:それはおそらく異なる著者によって作られたものです。

66
Floris Velleman

注:この投稿のすべてはJava7-b147のソースにあります

Double.parseDouble()はSunライブラリーに入ります( _Sun.misc.FloatingDecimal_ で)最初に起こる重要なことは:

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

Integer.parseInt()は、 Integer クラスで手動で実行されます。発生する最初の重要なことは次のとおりです。

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

2人の著者がいると思います。

59
durron597