何时在lambda表达式中指定必要的参数类型

Lin*_*ong 4 java lambda java-8

目前,我发现以下Java 8 lambda表达式没有区别:

指定的参数类型:

Arrays.sort(strArray, (String s1, String s2) -> s2.length() - s1.length());
Run Code Online (Sandbox Code Playgroud)

省略参数类型:

Arrays.sort(strArray, (s1, s2) -> s2.length() - s1.length());
Run Code Online (Sandbox Code Playgroud)

编辑:一般来说,有什么优点缺点在Java 8 Lambda表达式指定的参数类型?什么时候需要指定?

我想到了几个可能的原因(但我确信还有更多):

  • 指定时的附加型安全检查
  • 更好的代码可读性

Lou*_*man 6

没有区别.这取决于你的权衡.但坦率地说,你最好不要写这些; 相反,import static java.util.Comparator.comparingIntArrays.sort(strArray, comparingInt(String::length)).第一个版本不是更加类型安全; 第二个版本将推断完全相同的类型信息并完全执行它.

  • `Arrays.sort(array,Comparator.comparingInt(s - > s.length()).reversed());`不会编译.`Arrays.sort(array,Comparator.comparingInt((String s) - > s.length()).reversed());`will. (3认同)