1.1 使用和避免null Optional

一、使用场景

​ 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异常!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值