guava-librariesソースコードリーディング2回目

http://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained

このドキュメントを見る限り、Optionalって、ScalaのOptionと同じかな?
Scalaはちょっと触っただけで放置中なので、断言できないけど。

まあ、ソースを見てみるか。

Making an Optionalの3メソッド
Optional.of(T)、Optional.absent()、Optional.fromNullable(T)
を見てみる。

最初は、Optional.of(T)。
public static Optional of(T reference) {
return new Present(checkNotNull(reference));
}

checkNotNullって?
public static T checkNotNull(T reference) {
if (reference == null) {
throw new NullPointerException();
}
return reference;
}
ふむ。nullチェックですか。

Presentって?
private static final class Present extends Optional {
ふむ。Optionalのサブクラスね。


お次は、Optional.absent()。
public static Optional absent() {
return (Optional) Absent.INSTANCE;
}

private static final class Absent extends Optional {
private static final Absent INSTANCE = new Absent();

最後は、Optional.fromNullable(T)。
public static Optional fromNullable(@Nullable T nullableReference) {
return (nullableReference == null)
? Optional.absent()
: new Present(nullableReference);
}
ふむ。nullならAbsentを、nullじゃなければPresentを返す。

ということは、
AbsentはNullオブジェクトであり、ScalaのNoneにあたる。
Presentは、必ずnullじゃない値を持っていて、ScalaのSameにあたる。
って事か。