base.Optional
null
の扱いをわかりやすくするクラス
staticメソッド
返り値 Optional<T>
absent() - 参照なしのOptionalを作成
fromNullable(T nullableReference) - 値から、
ull
の可能性もあるOptionalを作成
nullだとabsent()
はfalse
になる。
get()
しようとすると、
java.lang.IllegalStateException
が発生
- of(T reference) - 値を参照するOptionalを作成
値がnullだと
java.lang.NullPointerException
が発生
返り値 Iterable<T>
- presentInstances(Iterable<? extends Optional<? extends T>> optionals) - 存在する値だけのIterableを作成する。
例
List<Optional<String>> optionals=Lists.newArrayList(Optional.of("hello"),Optional.<String>absent(),Optional.of("world"));
Iterable<String> values=Optional.presentInstances(optionals);
LogUtils.log(Lists.newArrayList(values).size());//size ==2 absentは除かれる。
メソッド
返り値 Set<T>
- asSet() - 参照だけを含む
Set
を返します。
isPresent()とget()で値取り出す代わりに、値があれば処理する内容を記述する時に便利
for(String value:optiona.asSet()){
//do something
}
返り値 boolean
- equals(Object object) - trueになりえるのは、objectが
Optional
の時のみ。さらに両方も参照同士がequals()、あるいは両方absentの時のみ。objectが参照と同じでもequalsにはならない。 - isPresent() - 値がnullでないか、どうか。
返り値 int
- hashCode() - このインスタンスのハッシュコードを返します。
返り値 T
- get() - 参照を取り出します。nullだとエラー
- or(Supplier<? extends T> supplier) - 値を取り出します。nullだとSupplierから取り出します。
- or(T defaultValue) - 値を取り出します。nullだとorのデフォルト値が使われます。
- orNull() - 値を取り出します。nullだとnullがエラーが出ずに返ります。
返り値 String
- toString() - このインスタンスのtoString()
例:Optional.of(hello)
返り値 Optional<T>
- or(Optional<? extends T> secondChoice) - もし値がなければ、引数のOptionalをそのまま返します。
返り値 Optional<V>
- transform(Function<? super T,V> function) - 変換されたOptionalが返ってくる。
呼び出し元がabsentなら、ファンクションは呼び出されずにabsentなOptionalが返る。
また、Functionの結果がnullなら、NullPointerException
が発生
感想
引数で渡される場合
nullの場合にデフォルト値を入れるケースだと
if(title==null){title="default";}
よりは、スッキリする気がする。
String title=titleOptional.or("default");
ただ、値があるときだけ処理するケースだと
これより
if(title!=null){
//do something.
}
これの方がいいかは、好みの問題。まあ、!=
より:
の方がスッキリするけど
for(String title:titleOptional.asSet()){
}
三項演算子みたいなこともできる?
まあ、慣れの問題
String title=ref!=null?ref:"default";
が
String title=Optional.fromNullable(ref).or("default");
あるいは、toStringsのところで、軽く使うのもいいかも
return Optional.fromNullable(a.getId()).or("")+","+Optional.fromNullable(a.getTitle()).or("");