guava Optional
测试代码
public static void main(String[] args) { Optional<Integer> object1 = Optional.of(Integer.valueOf(1)); Optional<Integer> object2 = Optional.absent(); Optional<Integer> object3 = Optional.fromNullable(Integer.valueOf(1)); System.out.println(object1.get()); System.out.println(object1.or(Integer.valueOf(3))); System.out.println(object1.orNull()); if (object1.isPresent()){ System.out.println("object1 present"); } try { System.out.println(object2.get()); }catch (Exception e){ System.out.println("exception when get absent object"); } System.out.println(object2.or(Integer.valueOf(3))); System.out.println(object2.orNull()); if (object2.isPresent()){ System.out.println("object2 present"); } System.out.println(object3.get()); System.out.println(object3.or(Integer.valueOf(3))); System.out.println(object3.orNull()); if (object3.isPresent()){ System.out.println("object3 present"); } }
运行结果
1
1
1
object1 present
exception when get absent object
3
null
1
1
1
object3 present
小结
在Guava中一个Optional对象可以包含一个非空的对象,每一个Optional实例要么包含一个非空的对象,要么什么都不包含,不会出现包含一个空引用的情况。因此一个Optional对象定义了两种类型来分别表示它们: Present和Absent。
根据具体的需要,创建不同的Optional实例:
创建一个包含非空对象的Optional: Optional.of(T)
创建一个不包含对象的Optional: Optional.absent()
从一个可空的对象返回的Optional: Optional.fromNullable(T)
每一个实例此时就可以通过实例方法来获得被包装的对象:
T get() 返回被包含的对象,如果实例是Absent,则抛出IllegalStateException
T or(T) 返回被包含的对象,如果实例是Absent,返回参数指定的对象
T orNull() 返回被包含对象,如果实例是Absent,返回Null
ps, guava的optional方法已经被java8采用,用法类似。