Come mai javac
non emette errori su questo codice?Perché java consente NPE
private static int compute(int v) {
return v == 0 ? null : v;
}
Sicuramente, compute(0)
getteranno NullPointerException
. Mi aspetto che il compilatore Java per evitare questo facendo un po 'di analisi statica del codice di base, proprio come avrebbe impedito
private static int compute(int v) {
if (v == 0)
return null;
else
return v;
}
Oh capisco. 'v == 0? null: v' induce il tipo Integer e trucchi il compilatore. Continuo a pensare che sia stupido. – milan
Questo è uno dei motivi per cui l'uso dell'operatore ternario è generalmente considerato da alcuni come una cattiva pratica. Molti sviluppatori new to Java lo vedono e pensano che sia un'opportunità per ridurre la verbosità in realtà è un ottimo modo per causare bug difficili da trovare. – CheeseFerret