默认方法一种扩展旧代码的方法
如您所知,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
默认方法一种扩展旧代码的方法相关推荐
- gdb 扩展 默认参数_默认方法一种扩展旧代码的方法
gdb 扩展 默认参数 如您所知,Java的新版本已于2014年3月18日发布,我将介绍一系列文章来演示其新功能,也许在某些方面,我将谈论我的想法和批评. 我认为重要的第一个功能是"默认方法 ...
- 网站被黑后处理方法及删除批量恶意代码的方法步骤
网站被黑后处理方法及删除批量恶意代码的方法步骤 如果发现网站出现异常情况,如页面被修改.管理账号不能登录,则说明网站已经被入侵.这时就需要尽快进行处理,以防止黑客种植的网页病毒扩散. 暂时关闭网站 网 ...
- 属于不安全的http请求方法的是_祛斑方法哪种效果最好,这些方法安全祛斑不反弹...
色斑有很多种,黄褐斑.雀斑.日晒斑.妊辰斑等,斑斑点点在脸上严重影响自信心,甚至会造成自卑心理,不愿和别人交流,那么祛斑方法哪种效果最好呢,今天小编就解读目前最有效的祛斑方法. 祛斑方法哪种效果最好, ...
- 一种在旧代码上增加新需求的重构模式
应用场景 相信大家遇到过这种场景: 旧代码中已经有一堆的if-else或者switch-case了:产品却要求在这段流程里增加一个新的功能. 这种时候大家会怎么做? 我的建议是: 重构这段代码.在重构 ...
- java sleep方法_6种快速统计代码执行时间的方法,真香!(史上最全)
我们在日常开发中经常需要测试一些代码的执行时间,但又不想使用向 JMH(Java Microbenchmark Harness,Java 微基准测试套件)这么重的测试框架,所以本文就汇总了一些 Jav ...
- java js隐藏_Javascript匿名函数是否仍然可见? (使用Java applet,这是一种隐藏JS代码的方法)...
我正在使用Javascript编写应用程序.我正在寻找一种隐藏代码的方法,我想我已经找到了一个使用Java Applet的代码. 无论如何,我认为只有在评估js匿名函数的代码后仍然无法以任何方式访问它 ...
- 计算机网络安全通信的实现方法,一种计算机网络安全通信的实现方法及系统的制作方法...
专利名称:一种计算机网络安全通信的实现方法及系统的制作方法 技术领域: 本发明涉及计算机网络安全通信领域,具体讲本发明是一种关于计算机网络安全通信的 实现方法及系统. 背景技术: 在许多安全相关的高可 ...
- 计算机加解密的主要方法,一种计算机存储器的加密方法和解密方法技术
本发明专利技术公开了一种计算机存储器的加密和解密方法,加密包括步骤:1.将需要加密的数据划分为多个数据块:2.对每个数据小块进行hash运算,对得到的结果做加密运算,得到数据块对应的中间变量(标记为P ...
- 6种编写程序代码的方法
https://developer.aliyun.com/article/718649?utm_content=g_1000088936
最新文章
- 什么是Hive?它有哪些特点和特性?
- SpringBoot+WebSocket实时监控异常
- 脉冲20KV高压发生器电弧打火
- App设计灵感之十二组精美的外卖App设计案例
- android下关闭软键盘
- Android JNI入门第五篇——基本数据类型使用
- vue 跳添加编辑页面传两个值_vue两个组件间值的传递或修改方式
- WSARecv参数lpNumberOfBytesRecvd的一个变态问题
- ASP.NET生成验证码
- Java多线程11:ReentrantLock的使用和Condition
- 二十一天学通C++之使用throw抛出异常
- 拉丁正方形 java_LeetCode 221. Maximal Square 最大正方形(C++/Java)
- 实验二:运算器数据通路
- liteide使用教程 linux,liteide下载-LiteIDE(Go语言开发工具) 附使用教程 X30.3 中文免安装版 - 河东下载站...
- mw310r无线路由器怎么设置虚拟服务器,水星mw310r无线路由器接光猫怎么设置?
- JAE触摸屏维修JAE人机界面维修UT3-TS5-B
- 《代码大全》读书笔记
- 深空时代来临,探日究竟有何魔力?
- MAXIMO部分AppBean类操作经验
- 让你心动的20句励志文案
热门文章
- Spark SQL 中UDF的讲解
- (转)web.xml 中的listener、 filter、servlet 加载顺序及其详解
- JavaWeb项目:简易小米商城系统
- java项目:永和大王项目_Java项目:书评
- react核心虚拟dom_使用虚拟时间测试基于时间的React堆核心流
- spring boot缓存_Spring Boot和缓存抽象
- 在AWS第1部分中使用Terraform自动缩放组:基本步骤
- 参数化测试 junit_使用JUnitParams进行参数化的JUnit测试
- 使用Spring Boot 2.0的Spring Security:保护端点
- 使用正确的垃圾收集器将Java内存使用量降至最低