我一直关注Java 8 Lambda表达式项目的发展已经有一段时间了,我对其当前的进展状态感到非常兴奋。 我发现的最新“易于理解”的演示文稿是这样的:
http://blogs.oracle.com/briangoetz/resource/devoxx-lang-lib-vm-co-evol.pdf

现在,作为一名API设计师,我对虚拟扩展方法的概念特别感兴趣,并且我想知道是否也考虑引入“最终”扩展方法而不是“默认”扩展方法。 例如:

interface A {void a();void b() default { System.out.println("b"); };void c() final { System.out.println("c"); };}

在实现上述接口A时,…

  • 还必须实现a()
  • 可以实现/重写b()
  • 无法覆盖c()

优点:

  • API设计人员可以更轻松地创建便捷方法,而不必冒险“非法”覆盖默认实现的客户端代码。 这是“决赛”的主要目的之一。
  • Lambda表达式不必仅限于纯“功能接口”(单方法接口),因为如果功能接口也具有任意数量的最终扩展方法,则其仍将是“功能”。 例如,如果删除了b()或也使b()成为最终接口,则上述接口A将成为功能接口。
  • 扩展方法将具有与常规方法相同的更多功能,而常规方法也可以是最终方法。 我想对于反射API和JVM来说 ,这是一个加号。
  • 无论如何,都会对JVM进行修改以支持扩展方法。 Java 8的动力也可以用于此功能,即现在正是考虑这一点的合适时机

缺点:

  • 在“钻石接口继承 ”的情况下,一个类可以继承多个冲突的最终方法实现。 这可能会导致现有代码中出现新的编译错误。 我想缺乏向后兼容性是最大的缺点。

与多重继承本身一样,谨慎的API设计人员在使用最终扩展方法时可以进一步改善其API,而不太谨慎的API设计人员可能会破坏客户端代码。 但是这个
以前使用“ final”也是如此,因此我认为最终扩展方法将是对Java 8的很好的补充。

请在此处查看完整的邮件和lambda-dev邮件列表中的后续邮件:

http://mail.openjdk.java.net/pipermail/lambda-dev/2011-December/004426.html

参考: JAVA,SQL和JOOQ博客上的JCG合作伙伴 Lukas Eder提供的Java 8虚拟扩展方法 。

相关文章 :

  • Java Lambda语法替代
  • Java SE 7、8、9 –推进Java
  • Java 7功能概述
  • 在Java 7中处理文件
  • 具有Java 7中自动资源管理功能的GC
  • Java 7:尝试资源

翻译自: https://www.javacodegeeks.com/2011/12/java-8-virtual-extension-methods.html

Java 8虚拟扩展方法相关推荐

  1. java虚拟内存扩展_Java 8虚拟扩展方法

    java虚拟内存扩展 我一直关注Java 8 Lambda表达式项目的发展已经有一段时间了,我对其当前的进展状态感到非常兴奋. 我发现的最新"易于理解"的演示文稿是这样的: htt ...

  2. java params 参数_将params作为参数传递给类扩展方法的函数

    我正在尝试将函数作为参数传递给类扩展方法 . 做的时候 fun Router.handleJsonGet(path: String, method: () -> Any) { this.get( ...

  3. java提供文件下载的方法

    java提供文件下载的方法     String root  =  getServletContext().getRealPath( " / " );     String pat ...

  4. java反射 数组类,乐字节Java反射之三:方法、数组、类加载器和类的生命周期

    继续讲述Java反射之三:方法.数组.类加载器 一.方法 获取所有方法(包括父类或接口),使用Method即可. public static void test() throwsException { ...

  5. [zz] 深入java虚拟机之本地方法

    [zz] 深入java虚拟机之本地方法 转自:http://blog.csdn.net/sunxiaosunxiao/article/details/6829899 本地方法就是直接和硬件打交道的一个 ...

  6. Java SE 12扩展Switch语句/表达式完整指南

    本文提供了Java SE 12扩展Switch语句/表达式的完整指南.文章详细介绍了扩展Java switch语句将其用作增强版switch语句或表达式.为帮助理解本文提供了具体案例. 本文要点 现在 ...

  7. java 重写方法 访问权限_为何Java中子类重写方法的访问权限不能低于父类中权限(内含里氏替换原则)...

    为何Java中子类重写方法的访问权限不能低于父类中权限 因为 向上转型及Java程序设计维护的原因 例: 假设一个父类A 拥有的方法public void setXXX(){}可以被其他任意对象调用这 ...

  8. java datainputstream_Java DataInputStream readUnsignedByte()方法

    Java DataInputStream readUnsignedByte()方法 java.io.DataInputStream.readUnsignedByte() 用于读取一个输入字节,将其零扩 ...

  9. java中所有函数都是虚函数_关于Java:虚拟函数与纯虚函数之间的区别是什么?...

    本问题已经有最佳答案,请猛点这里访问. Possible Duplicate: C++ Virtual/Pure Virtual Explained 虚函数和纯虚函数有什么区别? CPP中的纯虚函数与 ...

最新文章

  1. 信息熵及其相关概念--数学
  2. CORS跨域实现思路及相关解决方案
  3. MySQL 5.6.6 LABS 版本 下载 已经内含 Memcached
  4. oracle执行代码权限,利用Oracle许可执行安全模式实现更好的控制
  5. 子串字谜substring anagrams
  6. [How TO]-openjrok维护手册
  7. 3.3.1网络原理数据链路层之差错控制(检错编码和纠错编码)-(奇偶校验码、CRC循环冗余码、海明码)
  8. 51Nod - 1183 编辑距离
  9. 再探正则表达式c++-html中搜索url
  10. maven java jar_如何去maven仓库下载jar包
  11. [PHP] 算法-邻接矩阵图的广度和深度优先遍历的PHP实现
  12. oracle 重启后 检查,oracle常规检查有哪些,oracle RAC中的一个节点经常重启?
  13. [bzoj4826][Hnoi2017]影魔
  14. 基于matlab高等数学实验 pdf,基于MATLAB的高等数学综合性实验的教学设计.pdf
  15. JAVA三大器之拦截器
  16. [GIS热点] 网络篇-WebGIS、物联网、网格GIS、雾GIS、云计算
  17. 【B2B】阿里巴巴汪海:1688成年礼—从中小企业数字化看B2B发展趋势
  18. MySQL 递归 sql语句 WITH表达式实现
  19. 自定义Win7虚拟机的睡眠时间
  20. 2020.04.01 【ABAP随笔】- ABAP面试分享

热门文章

  1. Dijkstra 算法——计算有权最短路径(边有权值)
  2. jcmd 命令_jcmd:一个可以全部统治的JDK命令行工具
  3. java 指令重拍_我发现我的Java重拍了!
  4. java分割句子_关于Java的一些句子
  5. file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...
  6. 使用网真和WAD热部署Kubernetes
  7. 使用HTTPS和OAuth 2.0保护服务到服务的Spring微服务
  8. cassandra生产监控_碎玻璃:诊断生产Cassandra问题
  9. spring框架mvc框架_Spring的MVC测试框架入门–第1部分
  10. jaas_受JAAS保护的JAX-RS端点