使用Optional避免空指针异常
Optional用来表示可选择的,它的两个子类Present、Absent分别表示存在(not null)和不存在(null)。
Optional<Integer> possible = Optional.of(5); System.out.println( possible.isPresent() ); // true System.out.println( possible.get() ); // 5
创建Optional对象
Optional.of(T):创建一个Optional对象包含给定的非空引用,如果T为null在抛出NullPointerException异常
Optional.absent():返回代表某种类型的Absent对象
Optional<Long> absentLong = Optional.absent(); absentLong.getClass().getSimpleName(); // Absent
- Optional.fromNullable(T): 将一个可能为空的引用转换成Optional对象,如果为null,则是Absent对象;如果为not null,则是Present对象
Optional<String> present = Optional.fromNullable("present"); Optional<Object> absent = Optional.fromNullable(null); present.getClass().getSimpleName(); // Present absent.getClass().getSimpleName(); // Absent
查询方法
- boolean isPresent():如果Optional对象包含一个not null 引用则返回true;该方法是一个抽象方法,具体实现在两个子类中,Absent对象永远返回false,Present对象永远返回true
- T get():同样是一个抽象方法,对于Present对象,返回包含的引用;对于Absent对象,抛出IllegalStateException异常
- T or(T):对于Present对象,返回包含的引用;对于Absent对象,返回传入的参数引用
- T orNull():对于Present对象,返回包含的引用;对于Absent对象,返回null
- Set asSet():对于Present对象,返回SingletonSet(只包含一个元素的不可变集合);对于Absent对象,返回EmptySet(一个空集合)
便捷方法(com.google.common.base.Strings)
- String emptyToNull (String string)
String s1 = Strings.emptyToNull(""); // 将一个空字符串转换成null引用 s1 == null; // true
boolean isNullOrEmpty(String string):判断字符串是否是空串或者null
String nullToEmpty(String string):将null转换成一个空字符串对象