首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java 8 lambda语法中需要指定参数类型,有什么原因吗?

在Java 8 lambda语法中需要指定参数类型,有什么原因吗?
EN

Stack Overflow用户
提问于 2012-01-18 09:01:34
回答 2查看 315关注 0票数 5

我读过http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html,并注意到所有示例都有显式声明的参数类型,尽管它已经从接口函数声明中知道了。

代码语言:javascript
复制
public interface FileFilter {
    /** ... **/
    boolean accept(File pathname);
}


FileFilter java = (File f) -> f.getName().endsWith(".java");

我们就不能

代码语言:javascript
复制
(f) -> f.getName().endsWith(".java"); ?

更新:在JSR-335草案中,我发现最有可能支持推断类型的参数。

代码语言:javascript
复制
(int x) -> x+1 // Single declared-type parameter
(int x) -> { return x+1; } // Single declared-type parameter
(x) -> x+1 // Single inferred-type parameter
x -> x+1 // Parens optional for single inferred-type case 
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-18 10:32:35

有一个示例,在"4.目标类型“部分省略了该类型

代码语言:javascript
复制
Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
票数 3
EN

Stack Overflow用户

发布于 2012-01-18 09:17:58

我想这取决于它知道的类型有多晚。

在Java7中,=右侧的代码不知道如何使用表达式。要使其编译,就需要对编译器进行设计更改。

理论上,您甚至不需要变量声明,因为它是在父变量中指定的,或者可能是隐含的。

代码语言:javascript
复制
FileFilter java = (File f) -> f.getName().endsWith(".java");

可能是

代码语言:javascript
复制
FileFilter java = -> pathname.getName().endsWith(".java");

或者用暗示的吸气剂。

代码语言:javascript
复制
FileFilter java = -> pathname.name.endsWith(".java");

或者您可以假设参数是隐式导入到名称空间中的,因为只有一个参数。(就像SQL对列名的操作一样)

代码语言:javascript
复制
FileFilter java = -> name.endsWith(".java");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8907505

复制
相关文章

相似问题

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