Javaでのラッパークラスのnull回避

Javaにはプリミティブ型と参照型の2種類のデータ型がある。

プリミティブ型はboolean, char, byte, short, int, long, float, doubleであり、全て数値に換算可能な値そのものを扱う。

一方、参照型はインスタンスへの参照 (アドレス) を扱う型となっている。

Javaはオブジェクト指向の言語であり、基本的にはオブジェクト=参照型をメインで取り扱う。その際、プリミティブ型は参照型ではないため、オブジェクトとして取り扱えず、使い勝手が悪いときがある。こういうときのために、プリミティブ型を参照型として取り扱うためのラッパークラスのBoolean, Integer, Doubleなどが用意されている。

しかし、このラッパークラスを使うと、ラッパークラスは参照型のためインスタンスがnullになる可能性がある。例えば、年齢を文字列として表示する場合にIntegerを年齢として使う場合、Integerがnullの場合、「null才」と表示される。

C/C++であれば、型変換でnullは0とみなしてくれることが多いし、プリミティブ型を使っていればこのようなことはない。

そのため、ラッパークラスを使う場合、nullを回避する必要がある。このラッパークラスのnull回避の方法について記す。

A better way to convert Integer (may be null) to int in Java? – Stack Overflow」で議論されている。

Java 8が使える場合、以下の式で対応するとよい。

Optional.ofNullable(integer).orElse(-1)

Java 8が使えない場合、愚直に以下のようなメソッドを用意して対応するのが良いだろう。

    /**
     * ラッパークラスがnullの場合に0にする。
     * @param value
     * @return nullの場合0、それ以外は引数の値。
     */
    private double getValueOrZero(Double value) {
        return value == null ? 0.0 : value;
    }

こんなことを考えないといけないJavaは非常に面倒くさい。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です