我已阅读http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-4.html,并注意到所有示例都显式声明了参数类型,即使它已从接口函数声明中知道。Java 8 lambda语法中需要指定参数类型是否有任何原因?
public interface FileFilter {
/** ... **/
boolean accept(File pathname);
}
FileFilter java = (File f) -> f.getName().endsWith(".java");
我们不能走只
(f) -> f.getName().endsWith(".java"); ?
UPDATE:在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
,大部分的实施例中使用的清单参数类型的原因在省略的示例,即使从第1天开始考虑类型推断,也是纯粹的教学法。观众被认为是普通的Java开发人员,他们以前从未见过这些材料;抛出lambda表达式*和*一键式推断他们会有很大的吸引力。 – 2014-05-28 19:46:55