Java 为什么使用默认方法?
学习Java8默认方法。 这就像互联网上的任何其他资源所说的一样 在“最严格的意义上”,默认方法是一种倒退,因为 它们允许你用代码“污染”你的接口。但他们 提供最优雅、最实用的方式,允许倒退 兼容性。这使Oracle更容易更新所有 集合和类,以便您为 拉姆达 我的理解是,Java8dev/designers在接口中提供了默认方法,因此所有实现类都不必进行不必要的修改 重写相同的行为,因此提供向后兼容性。例如:-如果ForEach方法不是默认方法,则每个实现类的集合都必须实现它。同意 为了克服这个问题,我们可以让一个类提供这些默认方法的实现,然后实现像arraylist之类的类 我们已经扩展了这一点。通过这种方式,我们可以同时使用java基础(即可重用性)和抽象(即减少接口污染)来实现统计 我相信Java8dev/designer已经考虑过这一点,因为他们学到的知识要多得多,我在这里遗漏了一些东西。有人能在这方面提供帮助,使我们开发人员也能在这一重大变化中处于领先地位吗 为了克服这个问题,我们可以让一个类提供这些默认方法的实现,然后实现像arraylist之类的类来扩展它 您的建议仅适用于标准JDK类(因为如果可以添加新方法的实现,它们通常会扩展一些基类,例如Java 为什么使用默认方法?,java,java-8,default-method,Java,Java 8,Default Method,学习Java8默认方法。 这就像互联网上的任何其他资源所说的一样 在“最严格的意义上”,默认方法是一种倒退,因为 它们允许你用代码“污染”你的接口。但他们 提供最优雅、最实用的方式,允许倒退 兼容性。这使Oracle更容易更新所有 集合和类,以便您为 拉姆达 我的理解是,Java8dev/designers在接口中提供了默认方法,因此所有实现类都不必进行不必要的修改 重写相同的行为,因此提供向后兼容性。例如:-如果ForEach方法不是默认方法,则每个实现类的集合都必须实现它。同意 为了克服这个
AbstractCollection
和AbstractList
)
那么实现JDK接口的自定义类呢?例如,如果您有一个实现了List
但没有扩展某些JDKList
实现的类,那么您应该能够切换到Java8,而不必在类中实现新方法
使用
List
界面中新方法的default
实现,您不必接触自定义类。如果您对默认实现不满意,您可以稍后向这些方法添加自定义实现。在Java 8之前,接口只能有抽象方法
。这些方法的实现必须在单独的类中提供。因此,如果要在接口
中添加新方法,则必须在实现相同接口的类中提供其实现代码
为了克服这个问题,Java8引入了默认方法的概念,它允许接口具有带有实现的方法,而不影响实现接口的类
引入了默认方法
,以提供向后可比性,以便现有接口
可以使用lambda表达式,而无需在实现类中实现方法默认方法
也称为defender方法
或虚拟扩展方法
如果需要向接口添加新方法,则使用现有接口的客户端将被中断,因为类需要实现接口中的所有方法
在此场景中,可以使用。这些方法可以有主体,客户端不需要实现它们,因此现有的实现可以在不做任何更改的情况下工作
例如,如果您希望增强接口以添加接受lambda表达式的方法,则可以使用默认方法。在这种情况下,自定义类也可以扩展实现forEach实现的泛型类。但是,如果该类已经扩展了某个类,则限制再次出现,我的建议行不通。对于列表界面中新方法的默认实现,您不必接触自定义类。如果您对默认实现不满意,可以稍后向这些方法添加自定义实现。
同意。但我们也在某种意义上后退了一步,因为我们在某些方面稀释了抽象way@MSach即使它没有扩展某个类,您也将被迫更改其实现(即使只是添加一个extensedsomeclass
子句)。同意您上一次的评论可能重复的