一、使用场景
null 我们的日常开发是是最为经常遇到的,无论是查询结果还是数据匹配等原因都会经常得到一个null 对象。而且我们的开发中高达95%的api中不支持传入null值 所以我们的代码中会经常校验 ( _data != null ) 。但是有些产生场景我们没有预见性 经常会忘记 哈哈哈哈 … 就会导致我们开发最爱的错误之一 “ NullPointerException ”。另外 null 也会在很多情境下导致语义不清晰,因为他本身并没有什么自己的意义。
在Guava 中用Optional表示可能为null的 T 类型引用
1、创建Optional
1.1 Optional.of();
/**
* 临时测试类
*
* @author: lxs
*/
@Test
public void temporaryTest() {
// 测试
String aa = null;
Optional<String> optional = Optional.of(aa);
}
Console:
java.lang.NullPointerException
1.2 Optional.absent();
@Test
public void temporaryTest() {
// 测试
String aa = null;
Optional<Object> absent = Optional.absent();
// final class Absent<T> extends Optional<T>
}
返回的是 Absent 对象
1.3 Optional.fromNullable(T);
public static <T> Optional<T> fromNullable(@Nullable T nullableReference) {
return (Optional)(nullableReference == null ? absent() : new Present(nullableReference));
}
2、实例查询引用 非静态方法
2.1 boolean isPresent() 如果Optional包含非null的引用(引用存在),返回true
2.2 T get() 返回Optional所包含的引用,若引用缺失,则抛出java.lang.IllegalStateException
2.3 T or(T) 返回Optional所包含的引用,若引用缺失,返回指定的值
2.4 T orNull() 返回Optional所包含的引用,若引用缺失,返回null
2.5 Set asSet() 返回Optional所包含引用的单例不可变集,如果引用存在,返回一个只有单一元素的集合,如果引用缺失,返回一个空集合。
========================================
其实JDK 自己也有Optional
在Java.unit 包下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WjuyIhml-1639709133623)(C:\Users\shaye\AppData\Roaming\Typora\typora-user-images\1639705159897.png)]
简单的用法如下:
String abc = null;
String def = "123";
String s = Optional.of(abc).orElseGet(String::new);
String s1 = Optional.ofNullable(abc).orElse(def);
String s2 = Optional.ofNullable(abc).orElseThrow(NullPointerException::new);
其实道理都是相同的 都可以避免一些NullPointerException异常!!