首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么界面默认方法?

为什么界面默认方法?
EN

Stack Overflow用户
提问于 2015-11-15 15:12:47
回答 2查看 6.1K关注 0票数 14

学习java 8默认方法。这个链接就像互联网上的其他资源一样

在“最严格的意义”中,默认方法是倒退的一步,因为它们允许您用代码“污染”您的接口。但它们提供了最优雅和实用的方式,允许向后兼容。它使Oracle可以更容易地更新所有Collection类,并且可以对Lambda的现有代码进行修改。

我的理解是,java8dev/designers在接口中提供了默认方法,这样所有实现类都不必不必要地覆盖相同的行为,从而提供向后兼容性。例如:-如果ForEach方法不是默认方法,则每个集合实现类都必须实现它。同意。

为了克服这一点,我们可以有一个类提供这些默认方法的实现,然后实现类,如arraylist等,则可以扩展这个类。这样,我们就可以将java的基本原理(即可重用性和抽象性)都统计化,即减少接口污染。

我确信java8dev/designer已经考虑过这一点,因为他们学得更多了,我在这里遗漏了一些东西。有人能在这里提供帮助吗?这样我们的开发人员也可以在此基础上进行重大更改吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-15 15:16:51

为了克服这一点,我们可以有一个类提供这些默认方法的实现,然后实现类,如arraylist等,则可以扩展这个类。

您的建议只适用于标准JDK类(因为如果可以添加新方法的实现,它们通常扩展一些基类,如AbstractCollectionAbstractList )。

那么实现JDK接口的自定义类呢?例如,如果您有一个实现List但不扩展某些JDK List实现的类,那么您应该能够切换到Java8,而不必在类中实现新方法。

使用default实现的新方法在List接口中,您不必触摸您的自定义类。如果默认实现不满足,以后可以向这些方法添加自定义实现。

票数 12
EN

Stack Overflow用户

发布于 2016-10-08 07:34:57

在Java8之前,interfaces只能拥有abstract methods。这些方法的实现必须在一个单独的类中提供。因此,如果要在interface中添加新方法,则必须在实现相同接口的类中提供其实现代码。

为了克服这个问题,Java8引入了default methods的概念,它允许接口具有具有实现的方法,而不影响实现interface的类。

引入default methods是为了提供反向可比性,以便现有的interfaces可以使用lambda表达式,而无需在实现类中实现这些方法。Default methods也被称为defender methodsvirtual extension methods

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33721242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档