代码之家  ›  专栏  ›  技术社区  ›  OscarRyz

接口如何被Java中的闭包替换/扩充?

  •  11
  • OscarRyz  · 技术社区  · 16 年前

    Java 7将有闭包(最后),我想知道现在使用单一方法类/接口(如Runnabl、比较器等)的现有代码将如何使用。

    那个代码会被替换吗?会是某种转换吗?将添加一个使用闭包的额外方法?

    有人知道这是怎么回事/计划是什么?

    例如,今天要使用filefilter,我们需要:

    ....
    File [] files = directory.listFiles( new FileFilter() 
                          public boolean accept( File file ) {
                              return file.getName().endsWith(".java");
                           }
                       });
    

    有人知道这在Java7上是如何工作的吗?

    可能重载方法file.listfiles以接收闭包?

    File [] files = directory.listFiles(#(File file){
                        return file.getName().endsWith(".java");
                     });
    
    2 回复  |  直到 14 年前
        1
  •  8
  •   ColinD    15 年前

    这些类/接口称为sam(单一抽象方法)类型,而lambda到sam类型的转换是JDK7项目lambda建议的核心部分。事实上,最新的建议迭代将删除函数类型和 只有 允许lambda作为sam类型的实例。使用最新版本的语法(即 最后),您的示例可以写成:

    File[] files = directory.listFiles(#(file){file.getName().endsWith(".java")});
    

    listFiles(FileFilter) 与现在的情况保持不变。

    你也可以写

    FileFilter javaFileFilter = {#(file){file.getName().endsWith(".java")};
    

    你也可以看看这个 State of the Lambda 记录对建议的最新更新,并更详细地解释。还要注意,细节都会发生变化,尽管很确定lambda表达式/块可以像我描述的那样用作sam类型。

        2
  •  0
  •   user207421    16 年前

    现有代码不受影响,不需要替换。