Java 8 ではnullかもしれない値を表すOptionalクラスが導入された。例えば、SQLでString型の結果を取得した場合などは毎回if文でnullチェックしていたと思われるが、Optionalクラスを使うとnullの場合に空文字を返すなどの使い方が可能となる。
■ Optionalの使い方
Optionalクラスは内部にジェネリクス型の値を持つ。基本的には値の設定と取得をするだけのクラスだが、値がnullの場合の関数が幾つかよういされている。Optionalクラスの主な関数は以下の通りである。
関数 |
内容 |
empty() |
値がnullのOptionalインスタンスを作成する |
ofNullable(T value) |
値がvalueであるOptionalインスタンスを作成する |
orElse(T other) |
Optionalインスタンスが保持する値を返す。値がnullの場合はotherを返す |
orElseGet(Supplier other) |
Optionalインスタンスが保持する値を返す。値がnullの場合は引数で渡したSupplierインターフェースのget関数の戻り値を返す。 |
orElseThrow |
Optionalインスタンスが保持する値を返す。値がnullの場合は引数で渡したSupplierインターフェースのget関数の戻り値(Exception)の例外を発生させる。 |
■ サンプルコード
以下にOptionalクラスを利用したサンプルコードを示す。
◇サンプルコード
package application;
import java.util.Optional;
public class TestOptional {
public static void main(String[] args)
{
// Optional型の変数を作成
Optional<String> str1 = Optional.empty();
Optional<String> str2 = Optional.ofNullable( "文字列" );
// Optional型の変数を取得(orElse)
System.out.println( "str1は" + str1.orElse("null") + "です" );
System.out.println( "str1は" + str2.orElse("null") + "です" );
// Optional型の変数を取得(orElseGet)
System.out.println( "str1.ofElseGetの例:" + str1.orElseGet( () -> str1.toString() ) );
// Optional型の変数を取得(ofElseThrow)
try{
System.out.println( "str1.ofElseThrowの例:" + str1.orElseThrow( () -> new Exception("str1がnull") ) );
}catch( Exception e ){
System.out.println( e.getMessage() );
}
}
}
◇実行結果
str1はnullです
str1は文字列です
str1.ofElseGetの例:Optional.empty
str1がnull
■ 参照
- JavaDoc - クラスOptional