我已阅读http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html并注意到所有示例都具有显式声明的参数类型,即使它已经从interface-function声明中已知。
public interface FileFilter {
/** ... **/
boolean accept(File pathname);
}
FileFilter java = (File f) -> f.getName().endsWith(".java");
我们不能只用
(f) -> f.getName().endsWith(".java"); ?
更新:在JSR-335 Draft中,我发现最有可能支持推断类型参数
(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
答案 0 :(得分:3)
有一个例子,在“4.目标打字”部分
中省略了该类型Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
答案 1 :(得分:0)
我想这取决于它知道类型有多晚。
在Java 7中,=
右侧的代码不知道如何使用表达式。只是要编译它需要对编译器进行设计更改。
理论上,你甚至不需要变量声明,因为它在父节点中指定或者可以暗示。
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");