快速理解:JDK8 default 函数 和 Opetional<T> 作用
来源:互联网 发布:skype for ubuntu 14 编辑:程序博客网 时间:2024/05/16 12:37
许多人在学习了 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
- 快速理解:JDK8 default 函数 和 Opetional<T> 作用
- Linux下快速安装和配置jdk8
- default(T) 和 typeof 和 GetType()
- default(T)
- <? extends T> 和 <? super T>的作用
- jdk8新加入的default方法
- 理解函数原型的作用
- 超快速理解const修饰的作用
- 泛型default(T)应用
- C# default(T)
- 泛型default(T)应用
- 构造函数delete和default关键字分析
- C++构造函数的default和delete
- java中 private default protected 和 public的作用范围
- jdk8 函数式接口
- default关键字作用
- 枚举类型理解和作用
- $.data()的作用和理解
- git命令大全
- NOIP2015子串(洛谷2679)
- BZOJ4128: Matrix 矩阵BSGS
- 使用artTemplate模板开发网站(node.js + express环境)
- 普通冒泡排序法与通用冒泡排序法(C语言)
- 快速理解:JDK8 default 函数 和 Opetional<T> 作用
- Call to undefined method Illuminate\Database\Query\Builder::links()
- Linux初窥:系统管理之(进程管理、定时任务、系统监控)
- Hadoop大数据生态系统及常用组件简介
- oracle数据库内存结构pga/sga/uga做比较分析
- win10下vs2013+CUDA8.0+cuDNN8.0的caffe编译过程
- Appium基础篇7-元素定位之by_android_uiautomator
- PAT_A 1051. Pop Sequence (25)
- 自定义标签