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
)。
四季花海
TA贡献1811条经验 获得超5个赞
如您所说,其主要动机是允许现有接口的发展。
但是,出于某些原因,您也希望在全新的界面中使用它们:
其中一个原因是可以使用接口的其他(非默认)方法轻松实现的方法。default
为此使用方法可以减少对Foo
-interface / AbstractFoo
-base-implementation组合的需求(AbstractList
例如,请参见)。
尽管这不会创建一个全新的字段,但它意味着您可以拥有对最终用户友好的界面(具有许多有用的方法),同时仍然使其易于实现。
添加回答
举报
0/150
提交
取消