Nar*_*hai 43 java java-8 default-method
Java 8包含了一个名为Defender方法的新功能,它允许在接口中创建默认方法实现.
首先,对于Java中所有精简程序员来说,这是一个巨大的范式转换.我查看了Brain Goetz给出的JavaOne 13演示文稿,他正在讨论集合库中的新内容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");
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题基本上是默认方法只是在需要向接口添加新方法而不破坏客户端代码时才有用吗?或者它也有一些其他用途吗?
Hol*_*ger 57
除了可以在将来的版本中向接口添加方法之外,还有一个重点是允许interface
保持功能接口,即使它有多个方法.
功能接口只有一个非默认的抽象方法,可以通过lambda表达式实现.一个例子是在Predicate
界面仅具有一个抽象方法(test
同时提供用于抵消一个默认的方法)Predicate
或将其与另一种组合Predicate
.如果没有默认方法,这些方法必须在另一个实用程序类中提供,例如Java 8之前的Collections
类(因为您不希望放弃lambda实现的可能性interface
).
Joa*_*uer 20
正如您所说,主要动机是允许现有接口的演变.
但是,您也有理由想要在全新的界面中使用它们:
其中一个原因是可以使用接口的其他(非默认)方法轻松实现的方法.使用default
这种方法可以减少对Foo
-interface/AbstractFoo
-base-implementation组合的需求(AbstractList
例如,参见参考资料).
虽然这不会创建一个全新的领域,但这意味着您可以拥有最终用户友好的界面(具有许多有用的方法),同时仍然保持其易于实现.
归档时间: |
|
查看次数: |
8634 次 |
最近记录: |