Powered by Google App Engine

Google guava-libraries

 

Optinal

Optionalは所謂「ヌルオブジェクト」の実装です。

新サイト、tree-mapsを公開しました!!

tree-maps: 地図のWEB TOOLの事ならtree-mapsにお任せ!

地図に関するWEB TOOL専門サイトです!!

大画面で大量の緯度経度を一気にプロット、ジオコーディング、DMS<->DEGの相互変換等ができます!

◯ 広告

Optional.ofは、nullでない事が保証されている場合に使います。

String str = "hoge";
Optional<String> option = Optional.of(str);
System.out.println(option.isPresent());
=> true
System.out.println(option.get());
=> hoge

仮にnullをセットしようとNullPointerExceptionが発生します。

Optional<String> option = Optional.of(null);
=> NullPointerException(値が無いので必ず発生します)

ofの場合、値がある事が保証されているため、isPresent()メソッドを使ったチェック処理は必要ありません。

Optional.absentは、nullである事が保証されている場合に使います。

Optional<String> option = Optional.absent();
System.out.println(option.isPresent());
=> false
System.out.println(option.get());
=> java.lang.IllegalStateException: value is absent(値が無いので必ず発生します)

absentの場合、値が無い事が保証されているため、isPresent()メソッドを使って必ずチェックt処理を入れましょう。

Optional<String> option = Optional.absent();
System.out.println(option.isPresent());
if (option.isPresent()) {
	System.out.println(option.get());
}

Optional.fromNullableは、nullかどうか解らない場合に使います。

このfromNullableを使うケースが一番多いかと思います。

get()は単純に値を取得します。

String str = "hoge";
Optional<String> option = Optional.fromNullable(str);
System.out.println(option.isPresent());
=> true
System.out.println(option.get());
=> hoge

fromNullableの場合、値が無い事が保証されているため、isPresent()メソッドを使って必ずチェックt処理を入れましょう。

String str = "hoge";
Optional<String> option = Optional.fromNullable(str);
if (option.isPresent()) {
	System.out.println(option.get());
}

or()は、値がnullの場合に引数の値を返します。

String str = null;
Optional<String> option = Optional.fromNullable(str);
System.out.println(option.isPresent());
=> true
System.out.println(option.or("ぬるぽ"));
=> ぬるぽ

orNull()は、値がnullの場合にnullを返します。

nullに対してoption.get()すると「java.lang.IllegalStateException: value is absent」が発生します

それを防ぐため、or(arg0)・orNull()が用意されています。

String str = null;
Optional<String> option = Optional.fromNullable(str);
System.out.println(option.isPresent());
=> false
System.out.println(option.orNull());
=> null

値がnullでない場合は、イミュータブルなシングルトンのSetが返ります。

値がnullである場合は、空のSetが返ります

String str = "hoge";
Optional<String> option = Optional.fromNullable(str);
System.out.println(option.isPresent());
=> true
System.out.println(option.asSet());
=> [hoge]
for (String s : option.asSet()) {
	System.out.println(s);
	=> hoge
}

このasSet()は知っていないと誤解を招きそうですね。

この例ではStringを扱っているはずが、asSet()によってSet型をループして使っています。

正直イマイチ使い所が解りません。

public String getEmployeeName(Integer id) {
	Optional<Employee> option = Optional.fromNullable(employeeService.findById(id));
	return option.isPresent() ? option.get().employeeName : "-";
}
treeおすすめの書籍です!
【送料無料】実践ハイパフォ-マンスMySQL第2版

【送料無料】実践ハイパフォ-マンスMySQL第2版
価格:4,830円(税込、送料別)

【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド

【送料無料】エキスパ-トのためのMySQL運用+管理トラブルシュ-ティングガイド
価格:3,465円(税込、送料別)

【送料無料】基礎からのMySQL改訂版

【送料無料】基礎からのMySQL改訂版
価格:3,129円(税込、送料別)

◯ 広告