2019独角兽企业重金招聘Python工程师标准>>>

之前看一段java8的代码,发现接口都可以实现方法了,当然在老的教程里面是会告诉我们接口只是定义了方法的,为什么Java8要这样设计呢?看到一句话,既在不破坏java现有实现架构的情况下能往接口里增加新方法,引入Default方法到Java8,正是为了这个目的:优化接口的同时,避免跟现有实现架构的兼容问题。

看java8比较大的改动就是引入Lambdas表达式,很多接口中加入了相应的方法,比如下面的Iterable接口中增加了foreach的实现。如果在java之前的版本,在接口中定义了方法,我们实现接口的类,必须要实现,否则编译会报错,所以要想在某个接口中增加方法,而不修改现该接口现有的实现类,这是不可能做到的。但是按照我们Lambdas的编写,Default应时而生。

当然在collection接口有我们一直用的Stream操作。

然后用起来就很神奇了,如果我定义了两个接口都是default方法,那么写个类实现这两个方法,这不就是多继承吗?其中如果有相同的方法,那么这个类是要重新实现以下。其实我觉得我们在正常使用中,还是按照java7之前的原则写吧,因为一般业务我们没有很复杂的这种设计和关系。而在但是对于Java集合API的优化升级,并达到无缝地结合Lambda表达式来说,Default 方法是至关重要的特性。

如果不是考虑兼容,那么留着抽象类还有什么用呢?因为抽象类还可以有状态呀,还暂时无法完全替代抽象类。可以发现在Java9中不用default,也可以定义非公有的方法,下面我随便写了一个,还不知道java9中的目的是什么。未来的Java版本的接口可能会有更强的功能,或许能更大程度地替代原本需要使用抽象类的场景。

接口这是要上天呀!

转载于:https://my.oschina.net/u/2277632/blog/1580054

java函数式编程之接口Default方法五相关推荐

  1. java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

    java函数式编程归约reduce概念原理 stream reduce方法详解 reduce三个参数的reduce方法如何使用

  2. Java 函数式编程

    Java 函数式编程 一.Lambda表达式 1.1 函数式编程思想概述 在数学中,函数就是有输入量.输出量的一套计算方案,也就是"拿数据做操作" 面向对象思想强调"必须 ...

  3. Java 函数式编程和 lambda 表达式

    为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论.函数式与命令式编程的区别主要在于:函数式编程是告诉代码你要做什么,而命令式编程则是告诉代码要怎么做.说白了,函数式编程是基于 ...

  4. Java函数式编程整理

    2019独角兽企业重金招聘Python工程师标准>>> Java函数式编程的第一个作用是可以将匿名类改写成函数式表达式,由系统自动判断类型 我们先定义一个接口 public inte ...

  5. java函数式编程入口_Java中的函数式编程

    前言 JDK8引入的Lambda表达式和Stream为Java平台提供了函数式编程的支持,极大地提高了开发效率.本文结合网络资源和自身使用经验,介绍下Java中的函数式编程 Java中的函数式编程 出 ...

  6. JAVA8之函数式编程Supplier接口和Consumer接口

    JAVA8之函数式编程Supplier接口和Consumer接口 一.    Supplier接口 顾名思义,这是一个供应商,提供者.就如一个工厂一样.该类的源码如下: package java.ut ...

  7. 0202年了,还没有用上Java函数式编程!!!——Lambda表达式

    0202年了,还没有用上Java函数式编程!!!--Lambda表达式 函数式编程是什么 命令式编程(Imperative) 声明式编程(Declarative) 函数式编程(Functional) ...

  8. Java函数式编程随想

    java函数式编程的类主要定义在java.util.function包下.快速浏览了下该包下的一些类和接口.读者要想看懂function相关的源码,也需要对lambda表达式和泛型有一定的了解.本文只 ...

  9. Java 函数式编程入门

    Java 函数式编程入门 函数式编程实战 改进 完整代码   像 JavaScript 这种语言很早就支持闭包了,虽然 C++ 很早就有了函数指针,Java 也很早就提供了反射中的 Method 类, ...

最新文章

  1. P1912 [NOI2009]诗人小G
  2. linux机群下NFS+NIS服务的搭建以及MPICH的简单安装
  3. 2017软件工程第三次作业--效能分析
  4. jzoj1751-Span(每日C组)【并查集,贪心】
  5. c语言中aver是什么意思_Linux系统top命令中的io使用率,到底是什么意思?
  6. linux编译错误 程序中有游离的,操作系统实验报告 附思考题(24页)-原创力文档...
  7. C#LeetCode刷题-回溯算法
  8. PHP利用Mysql锁解决高并发
  9. FFmpeg音视频解码同步播放流程
  10. mysql表空间转移_mysql共享表空间扩容,收缩,迁移
  11. 解决cxgrid主从表数据显示不全的问题
  12. JAVA内存模型和GC原理
  13. 服装CAD软件测试初学者,CAD服装打版基础教程
  14. PHP实现微信模板消息推送 - 附代码
  15. 通信协议(一)——UART协议
  16. PS CC2019新手必学基础(首选项)设置
  17. 2021高考志愿填报总结-yy
  18. 原生 android 手机,享受原汁原味的安卓:七款原生安卓系统手机推荐
  19. 【Markdown语法】5分钟快速入门保姆级教程(建议收藏...)
  20. 小叶入门之Python爬虫(一)

热门文章

  1. 成大事必备的9种心态
  2. php 匹配正则,php正则匹配类
  3. 微x怎么设置主题_红人堂:抖音直播预告文案怎么写?5个小技巧提高你的文案吸引力!...
  4. eclipse配置java环境_Java工作环境的配置与Eclipse的安装过程
  5. python中用def实现自动排序_漫画排序算法Python实现
  6. mysql 排除另一表_MYSQL 两表 排除 重复记录
  7. (8)nginx:反向代理和负载均衡
  8. 频率概率与贝叶斯概率
  9. 【搜索引擎基础知识2】网络爬虫
  10. SQL实战篇:SQL解决连续X天的问题