Java7将有闭包(最终),我想知道使用单一方法类/接口(如Runnable、code等)的现有代码现在将如何使用。
那段代码会被替换吗?会是某种形式的转换吗?会添加一个使用闭包的额外方法吗?
有没有人知道这是怎么回事/计划是什么?
例如,要使用今天的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");
});发布于 2010-07-10 02:41:27
这些类/接口被称为SAM (单一抽象方法)类型,而lambda到SAM类型的转换是JDK7的lambda项目提案的核心部分。事实上,该提案的最新迭代删除了函数类型,只允许lambda作为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类型。
发布于 2010-07-10 18:14:26
现有代码不会受到影响,也不需要替换。
https://stackoverflow.com/questions/3215422
复制相似问题