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

为什么是接口默认方法?

柴磊
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接口中的默认方法,但我无法编译它: 编译器生成了以下输出: 我无法理解这些错误。我如何更正代码中的问题?

  • 我想通过创建一个具体实现类的对象来执行接口中默认方法的定义体,该对象也覆盖了该方法。无论我是直接创建具体实现类的对象,还是通过动态绑定/多态,实现类中定义/重写的主体都只是得到执行。请看下面的代码 我想知道如何在控制台内部界面银行打印以下内容--loan()