我读过http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html,并注意到所有示例都有显式声明的参数类型,尽管它已经从接口函数声明中知道了。
public interface FileFilter {
/** ... **/
boolean accept(File pathname);
}
FileFilter java = (File f) -> f.getName().endsWith(".java");我们就不能
(f) -> f.getName().endsWith(".java"); ?更新:在JSR-335草案中,我发现最有可能支持推断类型的参数。
(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 发布于 2012-01-18 10:32:35
有一个示例,在"4.目标类型“部分省略了该类型
Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);发布于 2012-01-18 09:17:58
我想这取决于它知道的类型有多晚。
在Java7中,=右侧的代码不知道如何使用表达式。要使其编译,就需要对编译器进行设计更改。
理论上,您甚至不需要变量声明,因为它是在父变量中指定的,或者可能是隐含的。
FileFilter java = (File f) -> f.getName().endsWith(".java");可能是
FileFilter java = -> pathname.getName().endsWith(".java");或者用暗示的吸气剂。
FileFilter java = -> pathname.name.endsWith(".java");或者您可以假设参数是隐式导入到名称空间中的,因为只有一个参数。(就像SQL对列名的操作一样)
FileFilter java = -> name.endsWith(".java");https://stackoverflow.com/questions/8907505
复制相似问题