快速理解:JDK8 default 函数 和 Opetional<T> 作用

许多人在学习了 JDK8 的 default 函数 和 Optional< T >之后,依然不知所云。
今天一段简单的代码告诉你怎么使用这两个新特性。
public interface CardCondition {
    public boolean conditionTrue(Card card);

    default public boolean isConditionTrue(Optional<Card> cardOp) {
        if (!cardOp.isPresent()) {
            return false;
        }
        return conditionTrue(cardOp.get());
    }
}
解读要点:
  • 首先,CardCondition 是一个判断 Card卡片是否合格的接口。

  • 紧接着,这个接口有一个专门用来负责检查卡片是否为合格的专用方法。
    注意这个方法声明为default,因此这个方法中是可以包含函数体的,这是default方法和普通方法声明的区别。
    (对,仅此而已,就是这么简单还叫做新特性)

  • 这个默认类在这里做了一个通用预处理,不管 Card以及它的子类如何,第一个合格的标准就是这个对象不为空。
    我们可以把大量的前置处理、后置处理、通用处理放在此处,而不是在每个实现类中去重复地实现。

  • 最后,做完这些前置处理,再把更具体并且不能统一的处理逻辑丢给实现类去完成。
    这个方法也被美称为设计模式之一的“模板模式”。

那么问题来了:
    • abstract抽象类也可以做到类似的功能,default方法的优势在哪里?
    • 答:抽象类只能单继承,而接口可以多实现。
      最重要的,是职责分离,大型结构中可以避免大量管理同一个抽象类中默认方法。
    • 直接在代码中 if(card==null) 不就行了吗,为什么要使用Optional封装?
    • 答:Optional最大的作用,就是防止别人忘记。
      如果你的同事从这个方法外传入一个null,就直接会在传入前报错。
      异常会在这个方法外部抛出。
      一来能快速定位,这使得你的同事以后每次看到这个Optional都会先判断一下,
      二来你不用再跟坑爹的人一起背锅
      三来是此后大家都自觉不偷懒,好人好事好项目。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值