猿问

Java 8中Default或Defender方法的目的

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");

  }

}

现在我的问题是,基本方法是否在需要添加新方法而不破坏客户端代码时才有用?还是还有其他用途?


慕勒3428872
浏览 456回答 3
3回答

慕娘9325324

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

四季花海

如您所说,其主要动机是允许现有接口的发展。但是,出于某些原因,您也希望在全新的界面中使用它们:其中一个原因是可以使用接口的其他(非默认)方法轻松实现的方法。default为此使用方法可以减少对Foo-interface / AbstractFoo-base-implementation组合的需求(AbstractList例如,请参见)。尽管这不会创建一个全新的字段,但它意味着您可以拥有对最终用户友好的界面(具有许多有用的方法),同时仍然使其易于实现。
随时随地看视频慕课网APP

相关分类

Java
我要回答