私が取り組んでいるプロジェクトの1つでこのコードに出くわしました
(これは Java です)
if (Boolean.TRUE.equals(foo.isBar()))
Foo#isBar()は と定義されてboolean isBar()
いるため、戻りませんnull
そのように書かなければならない理由は本当にありますか?私自身はただ書くだろう
if (foo.isBar())
、しかし、おそらく私は微妙なものを見逃しています。
ありがとう
私が取り組んでいるプロジェクトの1つでこのコードに出くわしました
(これは Java です)
if (Boolean.TRUE.equals(foo.isBar()))
Foo#isBar()は と定義されてboolean isBar()
いるため、戻りませんnull
そのように書かなければならない理由は本当にありますか?私自身はただ書くだろう
if (foo.isBar())
、しかし、おそらく私は微妙なものを見逃しています。
ありがとう
foo.isBar()
ブール値を返すことを願っています。その場合、いつでも書くことができますif (foo.isBar())
。あなたfoo.isBar()
が戻った場合Boolean
、それはBoolean.TRUE
、Boolean.FALSE
または のいずれかNULL
です。その場合if (Boolean.TRUE.equals(foo.isBar()))
、if ブロックが 1 つのシナリオ (TRUE) で実行され、残りの 2 つで省略されていることを確認します。
Boolean NULL を返すと、 Over and Aboveif (foo.isBar())
は失敗します。 foo.isBar()
isBar
プリミティブを返すため、boolean
意味上の違いはありません。さらに、2 番目の方法は、呼び出しのために結果を自動ボックス化し、元のブール値を再度抽出する必要がないため、より簡潔で明確で効率的です。以上のことから、最初の方法を使用する理由はなく、いくつかは 2 番目の方法を使用するので、2 番目の方法を使用します。私は仲間のコーダーにかなりの余裕を与えますが、プロのコードにそのようなものを追加した人なら誰とでも座ってチャットします.
私は「正当な理由のない古いレガシーコード」を疑うでしょう - そして実際、それはもっと悪いと主張します. (sはどうint
比較されるのかな..)
を使用するコードにTRUE.equals
は、ボクシング変換、追加のメソッド呼び出し (および内部のすべて) が必要であり、最終的には、ずさんに見えるだけです。
私が認識している唯一の理由は、返される(ない) として入力された場合と、返される可能性があるfoo.isBar
場所です。Boolean
boolean
null
Boolean b = null;
// throws an exception when it tries to unbox b because it is null
boolean isTrue1 = (boolean)b;
// evaluates to false
boolean isTrue2 = Boolean.TRUE.equals(b);
// evaluates to false as well
boolean isTrue3 = b != null ? (boolean)b : false;
一部の人々は (私自身はそうではありませんが)、過度に明示的であるとブール条件が読みやすくなると信じています。たとえば、
if(foo == true)
それ以外のif(foo)
おそらくこれは同様のケースですか?
最初の条件では、true に対応する Boolean オブジェクトの等価性をチェックしています。Javaバージョンは自動ボックス化解除をサポートしていないため、コードで最初の条件を使用しているため、ブールオブジェクトを使用する必要があります。