我当时正在学习lambada,其中有一点声明在java 8中,我们可以在接口中声明一个方法,如
interface Test {
default String method(){
return "string";
}
}根据规范,我们可以使用两个具有相同签名的方法,但是取决于程序员,他想如何使用它?现在的问题是,如果使用定义而不是声明来完成相同的任务,那么使用默认方法有什么意义呢?
就像它们与常规方法一样,定义和程序员需要声明主体和rest部分吗?
,什么是实际的要点,因为它似乎有点难以理解
发布于 2016-05-20 05:12:17
感谢@ElliottFrisch和@kagemusha搜索后给我的提示,我得到了回答
为什么是默认方法?
List<?> list = …
list.forEach(…); // lambda code goes hereforEach尚未由java.util.List声明,也未由java.util.Collection接口声明。一个明显的解决方案是将新方法添加到现有接口中,并在JDK中提供所需的实现。但是,一旦发布,就不可能在不破坏现有实现的情况下向接口添加方法。
因此,如果我们有Java 8中的lambda,但是不能使用标准的集合库,这将是非常令人沮丧的,因为不能牺牲向后兼容性。
由于上述问题,引入了一个新概念。现在可以将虚拟扩展方法,或通常称为defender方法的方法添加到提供声明行为的默认实现的接口中。
简单地说,Java中的接口现在可以实现方法。默认方法带来的好处是,现在可以向接口添加一个新的默认方法,并且不会破坏实现。
It doesn’t seem to be the language feature that would be appropriate to use every day, but it seems to be essential for Java Collections API update to be able to use lambdas naturally.
https://stackoverflow.com/questions/37338158
复制相似问题