JavaのOptional
table:nullチェックの必要有無
メソッド nullチェック
nullを返しうる 必要
nullを返さない 不要
問題点:Javaだとメソッドの返り値がオブジェクトだと、nullが入るのか入らないのかわからない
対策:Optionalクラスでラップして返す。そうするとチェックが必要な仕様になる
メソッド側: Optional<T>を返す
code:optMethod.java
public Optional<Parts> find2(String code) {
var parts = partsDB.get(code);
return Optional.ofNullable(parts);
}
呼び出し側: Optional<T>からTを取り出す
code:optCall.java
// 例1
var parts2 = searcher.find2("xxx").orElseThrow();
// 例2
var opt = searcher.find2("xxx");
if (opt.isEmpty()) { ... }
var parts = opt.get();
Optionalを使うときは、このルールを守ることが必要です。
1. メソッドの戻り値の型として使用する。
2. Optional 型自身の変数は、決して null にしてはならない。
多人数のプロジェクトでコーディング規約を決めているのであれば、
null を返すことがあるメソッドは、必ず Optional を使う
逆に言うと、Optionalではないメソッドは null を返してはいけない
というルールを設けてみるのもよいかもしれません。
参考文献
Java : Optionalの基本 - プログラミングTIPS!
21.2 Optionalクラスとnull値の取り扱い(null安全)~Java Basic編 #java8 - Qiita
public.icon