小ネタ。正直、記述量が増えるので好き嫌いで言うと嫌いですが、NullPointerException(以後、NPE)が発生しなくなるので安全に処理したい時はオススメです。
環境
- Java
- 15
出現時期
- java.util.Objects
- Java1.7
Java7の時代からあります。分かりづらいですが、Object
ではないです。Objects
です。
使い方
Objects.equals(Object a, Object b);
どの辺が便利か
安全に比較することができます。特にプリミティブ型のラッパークラス(Integer, Boolean)等はnullになりうります。もし、nullと比較してしまうと、NPEが発生してしまいます。
@Test void test_01() { boolean param1 = true; Boolean param2 = null; try { var actual = param1 == param2; Assert.fail(); } catch (NullPointerException e) { } catch (Exception e) { Assert.fail(); } }
Objects.equalsを使用すると、NPEが発生せずにfalseが返却されます。
@Test void test_02() { boolean param1 = true; Boolean param2 = null; assertThat( Objects.equals(param1, param2) ).isEqualTo(false); }
なお、当然ですがObjects.equalsに渡す前にNPEが発生する場合は、NPEになります。
static class Nested { public Boolean bool; public Nested(Boolean bool){ this.bool = bool; } } @Test void test_05() { boolean param1 = true; Nested param2 = null; try { Objects.equals(param1, param2.bool); Assert.fail(); } catch (NullPointerException e) { } catch (Exception e) { Assert.fail(); } }
ソースコード
終わりに
Java7が出た時期は2011年7月ですので、もうこちらのクラスを知っている人は多いと思います。
地味ですが、NPEを回避できますのでぜひ使ってみて下さい。
この記事がお役に立ちましたら、各種SNSでのシェアや、今後も情報発信しますのでフォローよろしくお願いします。