Java 8 的 Lambda 表达式的实现方式还是基于已有的字节码指令,由 Lambda 表达式的方法签名结合上下文并经由 SAM 推断出正确的类型来。Java 8 的 Lambda 完整书写格式是
(type parameter1 [type parameter2, ...type parametern]) -> { statements here }
这种标准格式所表示的就是方法签名。
虽不及其他语言的 Lambda 表达式,像 Swift, Scala 可省略参数部分,可用默认参数名 $0
, $1
, 或 _
, 但 Java 8 的 Lambda 还是可以进行酌情简化
- 参数类型总是可省略 --
(x, y) -> { x + y; }
- 参数为一个时,参数括号可省略 --
x -> { System.out.println(x); }
- 语句为一条时,可省略大括号, 并且语句后不要分号 --
x -> System.out.println(x)
- 上面更进一步,如果是单条 return 语句,必须把 return 关键字去掉 --
x -> "Hello " + x
- 就差一点,参数部分总是不能省,无参必须写成
() -> System.out.println("hi")
- Java 8 中若要近似的实现无参数部分写法,那就是方法引用了 --
System.out::println