Google guava の Optional どう使う?

Google guava Release 10 で追加された com.google.common.base.Optional

null の判断そして判定結果に基づく処理を書きやすくする?

Optional は、コンストラクタを持たない、自らの static メソッドで生成する。
以下、3つのメソッドがある。

public static <T> Optional<T> of(T t)
  引数 t が null なら、NullPointerException を発生する。
  引数 t が、not null で、Optional<T> を生成

public static <T> Optional<T> fromNullable(@Nullable T nullableReference)
  引数が null でも、引数で指定するタイプ T の Optional を生成

public static <T> Optional<T> absent()
  null を表す Optional を生成、fromNullable(null) と同じ

Optional が提供するメソッドは、

public T get()
  Optional インスタンスが抱える値が null の場合は、
   java.lang.IllegalStateException: value is absent
  と例外を発生させる。
  null でなければ、Optional インスタンスが抱える値を返す。

public T orNull()
  Optional インスタンスが抱える値として、null または、値を返す。
  Optional.of(T t) で生成した場合、必ず null でない値を返す。

public T or(T defaultValue)
  Optional インスタンスが抱える値が null の場合は、
  引数 defaultValue の値を返す。
  null でなければ、Optional インスタンスが抱える値を返す。

------

この Optional の使い方として、例えば以下のような使い方が考えられる。

Integer port;

// 何かの処理で port が生成または、初期化されない。

int reqPort = Optional.fromNullable(port).or(80);

でも、三項演算子だって同じことができる。

int reqPort = port==null ? 80 : port;

これだけの単純な比較なら、Optional fromNullable or メソッドを連携させても
あまり旨みがない。
入れ子の三項演算子がたくさん出るなら綺麗にできる。