2016-01-17 14 views
9

どうすればjavacはこのコードでエラーを発しませんか?JavaがNPEを許可するのはなぜですか

private static int compute(int v) { 
    return v == 0 ? null : v; 
} 

確かに、compute(0)NullPointerExceptionをスローします。私はそれがなぜJavaがNPEを許可しない

private static int compute(int v) { 
    if (v == 0) 
     return null; 
    else 
     return v; 
} 

答えて

5

を防止するであろうと同じように、いくつかの基本的な静的コード分析を行うことによって、これを防ぐために、Javaコンパイラを期待しますか?

例外状態を示す(および潜在的にを回復するプログラマを許可)にします。

例では、Javaはautoboxingunboxingの両方を許可しています。 nullは、intInteger未ボックスからintまで)にします。

+2

わかりました。 'v == 0? null:v'はInteger型を誘導し、コンパイラを欺く。私はまだそれがばかだと思う。 – milan

+0

これは、三元演算子を使用することは、一般に、一部の人々にとって悪い習慣とみなされる理由の1つです。新しいJava開発者の多くはそれを見て、実際には冗長性を減らす機会だと考えています。これはバグを見つけにくい素晴らしい方法です。 – CheeseFerret