什么是缺省方法?
在"
为何要在java中加入Lambda表达式"中使用了一个简单的集合方法forEach来举例,接受一个函数将之作用于每个传入的元素,例如:
pointList.forEach(p -> p.move(p.y, p.x));
但java集合框架在15年前设计的时候并没有考虑函数式思想,没有forEach方法,或这种策略要求的任何其他方法。将这些方法单独添加到集合框架中会破坏高度基于接口的集合框架类的一致性,就是这些接口定义了客户端代码依赖的契约(出于同样的原因,增加静态方法到工具集合类中也不是一个可取的解决方案)。所以框架接口需要反映添加到其集合框架中的新功能。但到现在为止将新方法添加到一个接口中,不强制修改现有类是不可能的,因为implements关键字代表由实现类来覆盖接口中所有的抽象方法。如果该接口增加了一个新的抽象方法,实现类也必须改变来实现它。
这就是引入缺省方法的理由(也称为虚拟扩展方法或者defender方法)。他们的目的是使接口得以延伸而不会与现有实现类不兼容。他们这种需求带动了接口的一个显著变化,根据JavaDoc中定义的抽象方法的语义,先前只能声明为抽象方法;而现在则相反,他们也可以以缺省实现的方式来声明具体的方法。例如,Iterator可以假想成有一个像skip这样的方法扩展(跳过单个元素):
interface Iterator {
// existing method declarations
default void skip() {
if (hasNext()) next();
}
}
假设Iterator以这种方式被扩展:所有实现类现在会自动暴露一个skip方法,客户端代码可以像调用完全相同的抽象接口方法一样调用skip。如果skip被一个实现了Iterator接口的的实例调用而没有为之提供实现,那么在接口中的默认实现就会被调用。另外,因为缺省方法是虚拟的,一个实现Iterator的类可以用更好或更具体的实现来覆盖默认的方法。
“为什么缺省方法需要一个关键字”回答了有关默认方法语法的一个常见问题。
分享到:
相关推荐
从关联理论看翻译中文化缺省问题---英语论文精修.docx
2.如何关闭缺省工具栏?(Visual C++编程 源代码)2.如何关闭缺省工具栏?(Visual C++编程 源代码)2.如何关闭缺省工具栏?(Visual C++编程 源代码)2.如何关闭缺省工具栏?(Visual C++编程 源代码)2.如何关闭...
21.如何关闭缺省状态栏?(Visual C++编程 源代码)21.如何关闭缺省状态栏?(Visual C++编程 源代码)21.如何关闭缺省状态栏?(Visual C++编程 源代码)21.如何关闭缺省状态栏?(Visual C++编程 源代码)21.如何...
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...
西门子如何在SCALANCE X414-3E上配置缺省路由?pdf,西门子如何在SCALANCE X414-3E上配置缺省路由?
行业资料-建筑装置-建立缺省数据无线承载的方法和装置.zip
行业分类-设备装置-一种缺省权限配置的方法和装置.zip
VC、UITableView 常用缺省页、loading页
经常看到函数定义时有好多参数,但实际调用时却只用到其中几个参数,研究老半天终于明白了
行业分类-设备装置-一种可缺省关键词的挖掘方法、数据搜索方法及设备
行业分类-设备装置-检测缺省网关状态的方法及系统
行业文档-设计装置-缺省承载上策略计费控制规则移除方法和装置.zip
S系列交换机缺省帐号与密码.zip
行业文档-设计装置-一种广告位缺省广告的投放方法.zip
Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和...
在开发中总会碰到列表没有数据的时候 需要一个缺省页。一般的做法是在View上在罩一层缺省页挡住tableView,感觉比较不方便。最近在学安卓和iOS,发现安卓的列表可以自带缺省页!!,于是受到启发写了这个小demo. 这...
oracle数据库中的缺省口令oracle数据库中的缺省口令oracle数据库中的缺省口令
爱普生针式打印机EPSONLQ-630K和LQ-635K缺省设值的设置方法.doc
c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数c++之第五函数重载与缺省参数
bashre---为shell用户设置系统范围的缺省设置。(缺省情况下,它的设置shell提示符包含当前用户名,主机名,当前目录和其他值) cdrecord.conf---包含了刻录cd所用的缺省值 crontab---设置cron环境变量和运行自动...