2021/12/11 北京 java内置函数式接口和optional类避免空指针异常

函数式接口,只包含一个抽象方法,可以在接口上使用@FuntionalInterface来检查它是否是一个函数式接口。

java内置四大核心函数式接口


 Consumer接口使用场景举例:

看的出来在写方法happyTime时,形参是一个接口,这个形参存在的意义就在于函数体里让别人调用它的抽象方法。妙就妙在调用happyTime()方法时,你是怎么给它传参的,怎么用lambda表达式去实现这个接口的。你所看到的最终程序也就是什么样的。


 函数型接口:Function<R, T>

    public void test3 () {
        String s = strOperar(" asdf ", x -> x.substring(0, 2));
        System.out.println(s);
        String s1 = strOperar(" asdf ", x -> x.trim());
        System.out.println(s1);
    }

    public String strOperar(String str, Function<String, String> fun) {
        return fun.apply(str);
    }

Predicate 接口举例:

String s;//String一个字符串s

pre.test(s)//用断言型接口的实例去调用他自己的test方法,把s当形参传进去

返回肯定是一个boolean值,用test方法来测试s到底满不满足我们所制定的规则。
制定规则的地方就是在pre中了,规则取决于它是怎么实现test()方法的。

 


Optional类作用:不用显示的去进行空值检测

 要是使用Optional类的话,Optional的俩个常用方法:

Optional.ofNullable(T t),创建一个Optional实例,t可以为null

orElse(T t),要是调用者optionalGirl(是一个Optional实例)不为空,返回该实例容器的对象,要是调用者为空,返回orElse(T t)中的 t。

Optional<Girl> optionalGirl=Optional.ofNullable(girl);
Girl girl1=optionalGirl.orElse(new Girl("瑶瑶公主"))

对下图代码存在的问题(可能发生空指针异常)进行改造

    public String getGirlName(Boy boy){
        //boy可能为null,boy.getGirl()也可能为null
        return boy.getGirl().getName();
    }

我们在调用时getGirlName()时就很可能发生空指针异常,要么boy本身为null,要么boy.getGirl()是一个null.怎么避免呢,没错就是加 if判断

public string getGirlName(Boy boy){
if(boy!=null){
Girl girl=boy.getGirl();
    if(girl!=null){
    return girl.getName();
     }
}
return null;
}

对下图代码存在的问题用Optional改造

    public String getGirlName(Boy boy){
        Optional<Boy> optional = Optional.ofNullable(boy);
        //此时boy1一定非空
        Boy boy1 = optional.orElse(new Boy(new Girl("公孙离")));
        Optional<Girl> optional1 = Optional.ofNullable(boy1.getGirl());
        //此时girl一定非空
        Girl girl = optional1.orElse(new Girl("杨玉环"));
        return girl.getName();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值