为了账号安全,请及时绑定邮箱和手机立即绑定

Java 8中Default或Defender方法的目的

Java 8中Default或Defender方法的目的

慕勒3428872 2019-10-10 16:45:14
Java 8包含了一个称为Defender方法的新功能,该功能允许在接口中创建默认方法实现。现在,这首先是所有Java压缩程序员的巨大范式转变。我查看了Brain Goetz给出的JavaOne 13演示文稿,他在其中讨论了Collections库中的新功能stream()和parallelStream()实现。为了在Collection接口中添加新方法,他们不能只添加新方法而不破坏以前的版本。因此,他告诉我们,为满足此需求,添加了Default方法的新功能。public interface SimpleInterface {  public void doSomeWork();  //A default method in the interface created using "default" keyword  default public void doSomeOtherWork(){    System.out.println("DoSomeOtherWork implementation in the interface");  }}现在我的问题是,基本方法是否在需要添加新方法而不破坏客户端代码时才有用?还是还有其他用途?
查看完整描述

3 回答

?
慕娘9325324

TA贡献1783条经验 获得超4个赞

除了可能在将来的版本中向接口添加方法之外,还有一点很重要的一点是interface,即使一个或多个方法都可以保留功能接口

功能接口只有一个非默认的抽象方法,该方法可以通过lambda表达式实现。一个示例是接口,该Predicate接口仅具有一个抽象方法(test),同时提供用于Predicate将a取反或与另一个组合的默认方法Predicate。如果没有默认方法,则必须在另一个实用程序类Collections(如Java 8之前的类)中提供这些方法(因为您不希望放弃针对此类的lambda实现的可能性interface)。


查看完整回答
反对 回复 2019-10-10
?
四季花海

TA贡献1811条经验 获得超5个赞

如您所说,其主要动机是允许现有接口的发展。

但是,出于某些原因,您也希望在全新的界面中使用它们:

其中一个原因是可以使用接口的其他(非默认)方法轻松实现的方法。default为此使用方法可以减少对Foo-interface / AbstractFoo-base-implementation组合的需求(AbstractList例如,请参见)。

尽管这不会创建一个全新的字段,但它意味着您可以拥有对最终用户友好的界面(具有许多有用的方法),同时仍然使其易于实现。


查看完整回答
反对 回复 2019-10-10
  • 3 回答
  • 0 关注
  • 455 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信