即将发布的Java 8版本中的虚拟扩展方法

12 java interface multiple-inheritance diamond-problem java-8

当我看到代码片段之类的时候

  interface A {
      void a();
      void b() default { System.out.println("b"); };
      void c() final { System.out.println("c"); };
  }
Run Code Online (Sandbox Code Playgroud)

我有一个问题.我们还没有得到足够的Java?为什么有人需要这个呢?

Tom*_*son 36

我们需要这个,因为它会让Scala家伙非常愤怒.它们已经具有"特征"形状的相似功能,所以现在他们必须将这些功能与这些功能结合起来.

压低Scala家伙实际上是Java语言开发中的最高优先级.

  • 显然Jordão是一个scala人,所以计划正在发挥作用. (15认同)
  • 实际上,我认为虚拟扩展方法是一种[非常不完整的实现](http://codecrafter.blogspot.ca/2012/06/java-8-virtual-extension-methods-are.html)的特征,可能会自己画出来进入一个角落. (4认同)

Jör*_*ann 13

计划Java 8将包含某种形式的lambda和闭包支持,这将是Java语言现代化的重要一步.问题是基于接口的现有库(如集合框架)将无法直接使用这些新功能.在不破坏现有实现的情况下,无法向接口添加方法,它们将不再简单地编译.

拥有lambdas但不能轻易地将它们与标准集合一起使用,对于Java开发人员来说将是一个巨大的失望.为了lambda表达式集成到标准的集合,方法一样forEach,mapfilter将是非常可取的.

此问题的解决方案是添加另一个功能,即扩展方法,它定义接口中方法的默认实现.现有的子类将使用默认方法,但也可以使用专门的,可能更好的实现来覆盖该方法.

有关扩展方法提议的更多信息,请参阅Java Enhancement Proposal 126.


dea*_*nix 7

我建议你看一下这个会议:http://medianetwork.oracle.com/media/show/16999

这解释了一切.最有趣的事情是允许接口进化而不重写整个代码库.这是允许大型代码库发展而不是变得越来越残缺的关键.