Java 为什么使用默认方法?

Java 为什么使用默认方法?,java,java-8,default-method,Java,Java 8,Default Method,学习Java8默认方法。 这就像互联网上的任何其他资源所说的一样 在“最严格的意义上”,默认方法是一种倒退,因为 它们允许你用代码“污染”你的接口。但他们 提供最优雅、最实用的方式,允许倒退 兼容性。这使Oracle更容易更新所有 集合和类,以便您为 拉姆达 我的理解是,Java8dev/designers在接口中提供了默认方法,因此所有实现类都不必进行不必要的修改 重写相同的行为,因此提供向后兼容性。例如:-如果ForEach方法不是默认方法,则每个实现类的集合都必须实现它。同意 为了克服这个

学习Java8默认方法。 这就像互联网上的任何其他资源所说的一样

在“最严格的意义上”,默认方法是一种倒退,因为 它们允许你用代码“污染”你的接口。但他们 提供最优雅、最实用的方式,允许倒退 兼容性。这使Oracle更容易更新所有 集合和类,以便您为 拉姆达

我的理解是,Java8dev/designers在接口中提供了默认方法,因此所有实现类都不必进行不必要的修改 重写相同的行为,因此提供向后兼容性。例如:-如果ForEach方法不是默认方法,则每个实现类的集合都必须实现它。同意

为了克服这个问题,我们可以让一个类提供这些默认方法的实现,然后实现像arraylist之类的类 我们已经扩展了这一点。通过这种方式,我们可以同时使用java基础(即可重用性)和抽象(即减少接口污染)来实现统计

我相信Java8dev/designer已经考虑过这一点,因为他们学到的知识要多得多,我在这里遗漏了一些东西。有人能在这方面提供帮助,使我们开发人员也能在这一重大变化中处于领先地位吗

为了克服这个问题,我们可以让一个类提供这些默认方法的实现,然后实现像arraylist之类的类来扩展它

您的建议仅适用于标准JDK类(因为如果可以添加新方法的实现,它们通常会扩展一些基类,例如
AbstractCollection
AbstractList

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


使用
List
界面中新方法的
default
实现,您不必接触自定义类。如果您对默认实现不满意,您可以稍后向这些方法添加自定义实现。

在Java 8之前,
接口只能有
抽象方法
。这些方法的实现必须在单独的类中提供。因此,如果要在
接口
中添加新方法,则必须在实现相同接口的类中提供其实现代码

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


引入了
默认方法
,以提供向后可比性,以便现有
接口
可以使用lambda表达式,而无需在实现类中实现方法
默认方法
也称为
defender方法
虚拟扩展方法

如果需要向接口添加新方法,则使用现有接口的客户端将被中断,因为类需要实现接口中的所有方法

在此场景中,可以使用。这些方法可以有主体,客户端不需要实现它们,因此现有的实现可以在不做任何更改的情况下工作


例如,如果您希望增强接口以添加接受lambda表达式的方法,则可以使用默认方法。

在这种情况下,自定义类也可以扩展实现forEach实现的泛型类。但是,如果该类已经扩展了某个类,则限制再次出现,我的建议行不通。
对于列表界面中新方法的默认实现,您不必接触自定义类。如果您对默认实现不满意,可以稍后向这些方法添加自定义实现。
同意。但我们也在某种意义上后退了一步,因为我们在某些方面稀释了抽象way@MSach即使它没有扩展某个类,您也将被迫更改其实现(即使只是添加一个
extensedsomeclass
子句)。同意您上一次的评论可能重复的