为什么默认方法在Java 8中包括接口,而不是向Collection Framework添加其他接口?

时间:2018-11-22 12:15:30

标签: java interface extends implements default-implementation

通常,接口在发布到生产环境后将被冻结。

因此,如果需要附加功能,则Java中的选择是将现有接口扩展到描述附加功能的新接口中。

在不破坏原始接口中指定的约定的意义上,这确保了向后兼容性,并且您可以自由地实现新接口来描述您具有附加功能的特定类的新版本。

但是,在Java 8中,接口引入了默认方法实现,从而可以在现有接口中指定其他方法,以确保向后兼容。但是,我不明白为什么您会选择上一个选项而不使用它-同时这样做会导致在创建质量低劣的代码方面出现严重错误。

有人可以详细说明吗?

1 个答案:

答案 0 :(得分:0)

很明显,在Java8中引入默认方法的最重要原因是向后兼容。如您所述,在此功能之前,要向接口类添加新方法,我们应该创建一个继承的类,这绝对不是一种有效的方法。因为这使开发人员可以在希望使用新开发的功能时更改所有对象类型。

要了解默认方法的重要性,请考虑需要多少更改才能将forEach方法添加到Iterable界面。如您所知,IterableCollection的父级,而Iterable是Java中所有现有列表类型的父级。在不引入default方法的情况下,向ExpectedException.expectCause()添加简单方法是一个巨大的改变!

此外,现在我正在受益于默认方法来减少代码编写,而且我不知道为什么在任何网站上都没有提到它。在某些继承的类中,方法的行为可以相同,并且我可以使用默认方法轻松地在父接口中实现该行为,并在需要的任何地方清楚地更改行为。但这不是什么大问题,但这确实使我对开发感到满意。