首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的闭包将如何替换/增强这些接口?

Java中的闭包将如何替换/增强这些接口?
EN

Stack Overflow用户
提问于 2010-07-10 02:18:09
回答 2查看 362关注 0票数 11

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

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

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

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

代码语言:javascript
复制
....
File [] files = directory.listFiles( new FileFilter() 
                      public boolean accept( File file ) {
                          return file.getName().endsWith(".java");
                       }
                   });

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

也许重载方法File.listFiles来接收闭包?

代码语言:javascript
复制
File [] files = directory.listFiles(#(File file){
                    return file.getName().endsWith(".java");
                 });
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-10 02:41:27

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

代码语言:javascript
复制
File[] files = directory.listFiles(#(file){file.getName().endsWith(".java")});

listFiles(FileFilter)与现在的版本保持不变。

你也可以写成

代码语言:javascript
复制
FileFilter javaFileFilter = {#(file){file.getName().endsWith(".java")};

您可能还想看看这个State of the Lambda文档,它是对提案的最新更新,并更详细地解释了这些内容。还请注意,细节都可能会发生变化,尽管可以肯定的是,lambda表达式/块将像我所描述的那样用作SAM类型。

票数 8
EN

Stack Overflow用户

发布于 2010-07-10 18:14:26

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3215422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档