如您所知,Java的新版本于2014年3月18日发布,我将介绍一系列文章来演示其新功能,也许在某些方面,我将谈论我的想法和批评。

我认为重要的第一个功能是“默认方法”,在所有Java语言的先前版本中,接口只能包含方法定义(声明)而不是方法实现(方法体),但是在Java 8中,接口中增加了一个新功能,使您能够在接口中声明方法及其实现。

假设您可以使用以下新功能创建一个界面:

public interface Dog {void bark();default void bite() {System.out.println("Biting Biting Biting");}
}public class Husky implements Dog {@Overridepublic void bark() {System.out.println("barking");}public static void main(String... args){Dog dog = new Husky();dog.bite();dog.bark();}
}

这是完全自我解释的,您可以将行为添加到接口中,并且所有已实现的类都将这种行为作为方法的默认实现,因此不会被迫实现默认方法。

默认方法的原因

在之前的一篇文章中,我们对Open Close Principal进行了介绍,就像在这个Principal类中的评论应该关闭才能进行修改而可以扩展一样。 我认为默认方法并不遵循该原则,但是有些地方也许我们没有任何解决方案来扩展我们的旧代码。

例如,在Java 8中,语言中增加了一个新功能,可以在集合上使用lambda,可以使用此方法的一种方法是调用Collection接口的stream方法,如果这只是一个方法声明,则说明实现了Collection的所有书面代码会休息的。

有时候,对我来说,需要扩展我的界面,但是由于许多其他客户端正在使用界面,我不得不找到另一种解决方案,不幸的是,在大多数情况下,这是一种麻烦的方式。

有关默认方法的几点

当您要使用默认方法或要使用使用默认方法的代码时,应了解一些要点。

  • 扩展包含默认方法的接口:
    当您想使用默认方法扩展或实现接口时,关于默认方法有三种选择。

    • 您可以使用它们的默认实现,而忽略以重新定义它们。
    • 您可以重新声明它,因此它将是一种抽象方法。
    • 您可以通过重新定义它来覆盖它。
  • 使用默认方法的多重继承:使用默认方法,您可以拥有具有许多接口的mixin行为的类,但是您应该注意一个重要的点。
    如果扩展接口具有公共方法签名,则您 将面临编译时错误 ,因为同一方法签名的两个实现之间存在歧义,在这种情况下,您将需要重写方法并通过自己的代码来实现或选择默认方法之一。
public interface FirstInterface {default void doSomething(){System.out.println("Doing something from FirstInterface");}}public interface SecondInterface {default  void doSomething(){System.out.println("Doing something from SecondInterface");}
}public class FirstImplementation implements SecondInterface,FirstInterface {@Overridepublic void doSomething(){SecondInterface.super.doSomething();}public static void main(String... args){System.out.println("GGG");new FirstImplementation().doSomething();}
}

翻译自: https://www.javacodegeeks.com/2014/03/default-methods-an-approach-to-extend-legacy-code.html

默认方法一种扩展旧代码的方法相关推荐

  1. gdb 扩展 默认参数_默认方法一种扩展旧代码的方法

    gdb 扩展 默认参数 如您所知,Java的新版本已于2014年3月18日发布,我将介绍一系列文章来演示其新功能,也许在某些方面,我将谈论我的想法和批评. 我认为重要的第一个功能是"默认方法 ...

  2. 网站被黑后处理方法及删除批量恶意代码的方法步骤

    网站被黑后处理方法及删除批量恶意代码的方法步骤 如果发现网站出现异常情况,如页面被修改.管理账号不能登录,则说明网站已经被入侵.这时就需要尽快进行处理,以防止黑客种植的网页病毒扩散. 暂时关闭网站 网 ...

  3. 属于不安全的http请求方法的是_祛斑方法哪种效果最好,这些方法安全祛斑不反弹...

    色斑有很多种,黄褐斑.雀斑.日晒斑.妊辰斑等,斑斑点点在脸上严重影响自信心,甚至会造成自卑心理,不愿和别人交流,那么祛斑方法哪种效果最好呢,今天小编就解读目前最有效的祛斑方法. 祛斑方法哪种效果最好, ...

  4. 一种在旧代码上增加新需求的重构模式

    应用场景 相信大家遇到过这种场景: 旧代码中已经有一堆的if-else或者switch-case了:产品却要求在这段流程里增加一个新的功能. 这种时候大家会怎么做? 我的建议是: 重构这段代码.在重构 ...

  5. java sleep方法_6种快速统计代码执行时间的方法,真香!(史上最全)

    我们在日常开发中经常需要测试一些代码的执行时间,但又不想使用向 JMH(Java Microbenchmark Harness,Java 微基准测试套件)这么重的测试框架,所以本文就汇总了一些 Jav ...

  6. java js隐藏_Javascript匿名函数是否仍然可见? (使用Java applet,这是一种隐藏JS代码的方法)...

    我正在使用Javascript编写应用程序.我正在寻找一种隐藏代码的方法,我想我已经找到了一个使用Java Applet的代码. 无论如何,我认为只有在评估js匿名函数的代码后仍然无法以任何方式访问它 ...

  7. 计算机网络安全通信的实现方法,一种计算机网络安全通信的实现方法及系统的制作方法...

    专利名称:一种计算机网络安全通信的实现方法及系统的制作方法 技术领域: 本发明涉及计算机网络安全通信领域,具体讲本发明是一种关于计算机网络安全通信的 实现方法及系统. 背景技术: 在许多安全相关的高可 ...

  8. 计算机加解密的主要方法,一种计算机存储器的加密方法和解密方法技术

    本发明专利技术公开了一种计算机存储器的加密和解密方法,加密包括步骤:1.将需要加密的数据划分为多个数据块:2.对每个数据小块进行hash运算,对得到的结果做加密运算,得到数据块对应的中间变量(标记为P ...

  9. 6种编写程序代码的方法

    https://developer.aliyun.com/article/718649?utm_content=g_1000088936

最新文章

  1. 什么是Hive?它有哪些特点和特性?
  2. SpringBoot+WebSocket实时监控异常
  3. 脉冲20KV高压发生器电弧打火
  4. App设计灵感之十二组精美的外卖App设计案例
  5. android下关闭软键盘
  6. Android JNI入门第五篇——基本数据类型使用
  7. vue 跳添加编辑页面传两个值_vue两个组件间值的传递或修改方式
  8. WSARecv参数lpNumberOfBytesRecvd的一个变态问题
  9. ASP.NET生成验证码
  10. Java多线程11:ReentrantLock的使用和Condition
  11. 二十一天学通C++之使用throw抛出异常
  12. 拉丁正方形 java_LeetCode 221. Maximal Square 最大正方形(C++/Java)
  13. 实验二:运算器数据通路
  14. liteide使用教程 linux,liteide下载-LiteIDE(Go语言开发工具) 附使用教程 X30.3 中文免安装版 - 河东下载站...
  15. mw310r无线路由器怎么设置虚拟服务器,水星mw310r无线路由器接光猫怎么设置?
  16. JAE触摸屏维修JAE人机界面维修UT3-TS5-B
  17. 《代码大全》读书笔记
  18. 深空时代来临,探日究竟有何魔力?
  19. MAXIMO部分AppBean类操作经验
  20. 让你心动的20句励志文案

热门文章

  1. Spark SQL 中UDF的讲解
  2. (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解
  3. JavaWeb项目:简易小米商城系统
  4. java项目:永和大王项目_Java项目:书评
  5. react核心虚拟dom_使用虚拟时间测试基于时间的React堆核心流
  6. spring boot缓存_Spring Boot和缓存抽象
  7. 在AWS第1部分中使用Terraform自动缩放组:基本步骤
  8. 参数化测试 junit_使用JUnitParams进行参数化的JUnit测试
  9. 使用Spring Boot 2.0的Spring Security:保护端点
  10. 使用正确的垃圾收集器将Java内存使用量降至最低