gdb 扩展 默认参数

如您所知,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进行了介绍,正如对此主体类的复习应该关闭并进行扩展一样。 我认为默认方法并不遵循该原则,但是有些地方也许我们没有任何解决方案来扩展我们的旧代码。

例如,在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 扩展 默认参数_默认方法一种扩展旧代码的方法相关推荐

  1. function()默认参数中ReferenceError Cannot access ‘a‘ before initialization的解决方法

    function()默认参数中ReferenceError: Cannot access 'a' before initialization的解决方法 代码 <!DOCTYPE html> ...

  2. python函数设置默认参数_深入讲解Python函数中参数的使用及默认参数的陷阱

    这篇文章主要介绍了Python函数中参数的使用及默认参数的陷阱,文中将函数的参数分为必选参数.默认参数.可变参数和关键字参数来讲,要的朋友可以参考下 C++里函数可以设置缺省参数,Java不可以,只能 ...

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

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

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

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

  5. java设置默认参数_关于java:如何设置默认方法参数值?

    本问题已经有最佳答案,请猛点这里访问. 是否可以在Java中设置默认的方法参数值? 例子:如果有方法 public int doSomething(int arg1, int arg2) { //so ...

  6. 默认方法一种扩展旧代码的方法

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

  7. python 默认参数_有趣的 Python 特性 3 | 当心默认可变参数这个大猪蹄子。

    本文字数:1575 字 阅读本文大概需要:4 分钟 写在之前 Python 提供了很多让使用者觉得舒服至极的功能特性,但是随着不断的深入学习和使用 Python,我发现其中存在着许多玄学的输出与之前预 ...

  8. python 默认参数_避坑指南!Python里面的这九个坑,坑的就是你!

    Python里面有一些坑,让你防不胜防,菜鸟经常会弄晕,而学习多年的Python老鸟也会时不时中招.小编整理了9个坑,都是会经常碰到的坑,让你大呼我曾经也碰到过! 虽然是小的问题,但是在实际的项目中, ...

  9. g++默认参数_C ++默认参数| 查找输出程序| 套装2

    g++默认参数 Program 1: 程序1: #include <iostream> using namespace std; int K = 10; int fun() { retur ...

最新文章

  1. 一个复杂系统的拆分改造实践!
  2. Basic Windbg - 1. SOSBasics(再续)
  3. setjump longjump
  4. Silverlight与JavaScript通信
  5. PHP-Webshell免杀研究
  6. 复制linux内核,linux内核写时复制机制源代码解读
  7. datax 模板_dataX3.0安装使用手册.docx
  8. 坚实原则:开放/封闭原则
  9. 用mysql建立商城数据字典_把mysql数据库生成数据字典,直接可用
  10. PhantomJS其他语言调用
  11. [哈佛幸福课13 听后感]
  12. WordPress多功能主题 The7 更新至 v10.4.3 – 已激活汉化版
  13. 随机访问介质访问控制 —— ALOHA协议
  14. 重温前端基础(一) HTML、CSS、H5C3
  15. C++ 几个特殊符号
  16. opencv,获取图片
  17. L0 图片汇总(方便回顾)
  18. 【iconfont图标】vue引入并使用阿里巴巴iconfont图标流程【uniapp引入iconfont真机APP不显示问题解决,移动端引入报错解决】
  19. Windows安装mysql,亲测有效
  20. 微信小程序导入Vant Weapp组件库

热门文章

  1. [CF995F] Cowmpany Cowmpensation(树形dp,拉格朗日插值)
  2. 如何构建一套高可用的 APP 消息推送平台
  3. 推荐系统常用的推荐算法
  4. jsoup解析HTML用法小结
  5. 学习心得——李嫣然、逯广捷
  6. sh(Spring+Spring mvc+hibernate)——IDeptDao.java
  7. (选择 冒泡 插入 二分 异或)
  8. SecureCRT连接Linux的操作步骤
  9. (转)mysql查看连接客户端ip和杀死进程
  10. (转)threadPoolExecutor 中的 shutdown() 、 shutdownNow() 、 awaitTermination() 的用法和区别