当前位置: 首页 > 知识库问答 >
问题:

为什么是接口默认方法?

柴磊
2023-03-14

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

在“最严格的意义上”,默认方法是一种倒退,因为它们允许你用代码“污染”你的接口。但它们提供了允许向后兼容的最优雅和最实用的方法。它使Oracle更容易更新所有集合类,也使您更容易为Lambda修改现有代码。

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

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

我确信Java8开发人员/设计人员已经考虑过这一点,因为他们更有学问,我在这里缺少一些东西。能不能有人在这里帮忙,这样我们开发人员也可以在它的顶部作为这一重大变化?

共有1个答案

欧阳骏俊
2023-03-14

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

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

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

通过list接口中新方法的default实现,您不必接触自定义类。如果您对默认实现不满意,可以稍后向这些方法添加自定义实现。

 类似资料:
  • 首先,我的声明是: 我的主要活动获取编号和文本: 我的Activity2应该得到数字和文本: 文本很受欢迎,但数值始终为0。

  • 为什么Java 8不允许在接口中添加toString()的默认实现? 这是错误消息:

  • 问题内容: 向所有Java专家致敬! 从Java8开始,我们可以在接口中使用默认实现(是的!)。但是,当您想从默认方法登录时会出现问题。 我有种感觉,每次我想在默认方法中记录某些内容时都调用.getLogger()是不明智的。 是的,可以在接口中定义静态变量-但这对于接口而言不是一个好习惯,而且+暴露了记录器(必须是公开的)。 我目前的解决方案: LogHolder仍然对所有人可见,这实际上没有任

  • 问题内容: 考虑以下情况, 在上面的例子中我得到以下输出这是 相当 期待。 我一直在阅读有关默认方法的信息, 尤其是 关于扩展包含默认方法的接口的信息 2 第二子弹:重新声明的默认方法,这使得它的抽象。 在上面的示例中,我有两个接口的默认方法具有相同的名称,并且当我实现这两个接口时,我只能实现对的引用。 我对此几乎没有疑问, 我怎样才能 到达 的方法 和 如果我不能比,为什么? 没有这种行为从本质

  • 我试图使用以下代码理解Java接口中的默认方法,但我无法编译它: 编译器生成了以下输出: 我无法理解这些错误。我如何更正代码中的问题?

  • 问题内容: 当提交HTML表单而不指定方法时,默认的HTTP方法是什么?GET还是POST? 在HTML标准之间这种行为是否发生过变化? 请尽可能引用W3C标准文档。 问题答案: 是GET。 看一下W3C取代的建议书17.3FORM元素。 摘抄: 好读 HTML表单中的GET和POST方法-有什么区别?