学习java 8默认方法。 这个链接就像互联网上的任何其他资源一样
从“最严格的意义上”来说,默认方法是一种倒退,因为 它们允许你用代码“污染”你的界面。但他们 提供最优雅实用的倒退方式 兼容性。它使 Oracle 更容易更新所有 集合类,供您改造现有代码 拉姆达。
我的理解是java 8 dev/designers在接口中提供了默认方法,以便所有实现类不必不必要地 覆盖相同的行为,从而提供向后兼容性。例如:- 如果 ForEach 方法不是默认方法,则每个集合实现类都必须实现它。同意。
为了克服这一问题,我们可以有一个类提供这些默认方法的实现,然后实现像 arraylist 等这样的类 已经扩展了。这样我们就可以同时满足 Java 基础知识,即可重用性和抽象性,即减少接口污染
我确信 java 8 开发者/设计师已经考虑过这一点,因为他们学得更多,而我在这里遗漏了一些东西。有人可以在这里提供帮助,以便我们开发人员也可以在这一重大变化中掌握它吗?
在 Java 8 之前,
interfaces
只能有 abstract methods
。这些方法的实现必须在单独的类中提供。因此,如果要在 interface
中添加新方法,则必须在实现相同接口的类中提供其实现代码。
为了克服这个问题,Java 8 引入了
default methods
的概念,它允许接口具有可实现的方法,而不影响实现 interface
的类。
引入
default methods
是为了提供向后可比性,以便现有的 interfaces
可以使用 lambda 表达式,而无需实现实现类中的方法。 Default methods
也称为 defender methods
或 virtual extension methods
。
为了克服这一问题,我们可以有一个类提供这些默认方法的实现,然后实现像 arraylist 等这样的类可以扩展它。
您的建议仅适用于标准 JDK 类(因为它们通常扩展一些基类,例如
AbstractCollection
和 AbstractList
,可以添加新方法的实现)。
实现 JDK 接口的自定义类怎么样?例如,如果您有一个实现
List
但没有扩展某些 JDK List
实现的类,您应该能够切换到 Java 8,而无需在类中实现新方法。
通过
default
接口中新方法的 List
实现,您无需触及自定义类。如果您对默认实现不满意,您可以稍后向这些方法添加自定义实现。
如果需要向接口添加新方法,则使用现有接口的客户端将被破坏,因为类需要实现接口中的所有方法。
在这种情况下,可以使用默认和静态方法。这些方法可以有主体,客户端不需要实现它们,因此现有的实现无需任何更改即可工作。
例如,如果您想增强接口以添加接受 lambda 表达式的方法,则可以使用默认方法。
这是场景:
我们构建了一个具有多个接口的应用程序。
我们向客户提供了这个应用程序,他们都开始使用它。
过了一段时间,我们决定更新这些界面。那时,如果我们添加任何新的抽象方法,这些方法必须由我们的客户实现。
在这种情况下,默认方法和静态方法起着至关重要的作用。通过添加新的默认或静态方法,我们的客户不需要实现它们。
Hope you got it.