Osc*_*Ryz 11 java closures java-7
Java 7将有闭包(最后),我想知道现在如何使用单个方法类/接口(如Runnable,Comparator等)的现有代码.
该代码会被替换吗?将是某种转换?将添加使用闭包的额外方法?
有谁知道这是如何工作/计划是什么?
例如,今天要使用FileFilter,我们可以:
....
File [] files = directory.listFiles( new FileFilter()
public boolean accept( File file ) {
return file.getName().endsWith(".java");
}
});
Run Code Online (Sandbox Code Playgroud)
有谁知道这对Java7有什么用?
也许重载方法File.listFiles来接收一个闭包?
File [] files = directory.listFiles(#(File file){
return file.getName().endsWith(".java");
});
Run Code Online (Sandbox Code Playgroud)
这些类/接口称为SAM(单一抽象方法)类型,lambdas到SAM类型的转换是JDK7项目lambda建议的核心部分.事实上,最新的提议迭代会删除函数类型,并且只允许lambdas作为SAM类型的实例.使用最新版本的语法(不是最终版本),您的示例可以写成:
File[] files = directory.listFiles(#(file){file.getName().endsWith(".java")});
Run Code Online (Sandbox Code Playgroud)
与现在listFiles(FileFilter)不变.
你也可以写
FileFilter javaFileFilter = {#(file){file.getName().endsWith(".java")};
Run Code Online (Sandbox Code Playgroud)
您可能还想查看Lambda文档的状态,这是该提案的最新更新,并更详细地解释了一些内容.另请注意,细节都可能会发生变化,但很可能确定lambda表达式/块可以像我所描述的那样用作SAM类型.
| 归档时间: |
|
| 查看次数: |
354 次 |
| 最近记录: |