为什么在Java 8 lambda语法中需要指定参数类型是否有任何理由?

Bor*_*hov 5 java lambda java-8

我已经阅读了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");
Run Code Online (Sandbox Code Playgroud)

我们不能一起去

(f) -> f.getName().endsWith(".java"); ?
Run Code Online (Sandbox Code Playgroud)

更新:在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 
Run Code Online (Sandbox Code Playgroud)

Dan*_*ply 3

在“4.目​​标类型”部分中有一个省略类型的示例

Comparator<String> c = (s1, s2) -> s1.compareToIgnoreCase(s2);
Run Code Online (Sandbox Code Playgroud)