11

Java 7 将有闭包(finally),我想知道现在将如何使用使用单一方法类/接口(如 Runnable、Comparator 等)的现有代码。

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

有谁知道这将如何运作/计划是什么?

例如,今天要使用 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");
                 });
4

2 回答 2

8

这些类/接口称为 SAM(单一抽象方法)类型,将 lambda 转换为 SAM 类型是 JDK7 项目 lambda 提案的核心部分。事实上,该提案的最新迭代删除了函数类型,允许 lambdas 作为 SAM 类型的实例。使用最新版本的语法(不是最终版本),您的示例可以写成:

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

listFiles(FileFilter)现在的样子保持不变。

你也可以写

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

您可能还想查看这份Lambda文档状态,它是提案的最新更新,并更详细地解释了事情。另请注意,细节都可能发生变化,尽管可以肯定 lambda 表达式/块将可用作我所描述的 SAM 类型。

于 2010-07-09T18:41:27.120 回答
0

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

于 2010-07-10T10:14:25.867 回答