Java 7将有闭包(最后),我想知道现在如何使用单个方法类/接口(如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");
});
答案 0 :(得分:8)
这些类/接口称为SAM(单一抽象方法)类型,lambdas到SAM类型的转换是JDK7项目lambda建议的核心部分。事实上,最新的提案迭代删除了函数类型,而仅允许lambdas作为SAM类型的实例。使用最新版本的语法(不 final),您的示例可以写成:
File[] files = directory.listFiles(#(file){file.getName().endsWith(".java")});
listFiles(FileFilter)
与现在相同。
你也可以写
FileFilter javaFileFilter = {#(file){file.getName().endsWith(".java")};
您可能还想查看此State of the Lambda文档,该文档是该提案的最新更新,并更详细地解释了这些内容。另请注意,细节都可能会发生变化,但很可能确定lambda表达式/块可以像我所描述的那样用作SAM类型。
答案 1 :(得分:0)
现有代码不受影响,无需更换。