Lambda 表达式语法
基本语法
Lambda 表达式的组成:
参数列表:即方法的参数列表,对应于
Runnable接口的run方法,该方法没有参数,所以这里为空。箭头符号:箭头符号将参数列表与
Lambda表达式的主体分隔开。Lambda表达式的主体:即方法体,对应于Runnable接口的run方法的方法体。
new Thread(() -> System.out.println("Hello World")).start();Lambda 表达式可以分为以下几种形式:
// 01、无参数,无返回值
() -> System.out.println("Hello World")
// 02、有一个参数,无返回值
(String name) -> System.out.println("Hello " + name)
// 03、有一个参数,无返回值,参数类型可以省略
name -> System.out.println("Hello " + name)
// 04、有多个参数,无返回值
(String name, int age) -> System.out.println("Hello " + name + ", age is " + age)
// 05、有多个参数,无返回值,参数类型可以省略
(name, age) -> System.out.println("Hello " + name + ", age is " + age)
// 06、有返回值
() -> {
System.out.println("Hello World");
return "Hello World";
}
// 07、有返回值,单条语句,return 与大括号可以省略
() -> "Hello World"
// 08、有返回值,单条语句,return 与大括号可以省略,参数类型可以省略
name -> "Hello " + name
// 09、有返回值,多条语句,return 与大括号不能省略
() -> {
System.out.println("Hello World");
return "Hello World";
}变量的作用域
Lambda 表达式中可以访问外部的变量,但是有以下限制:
Lambda表达式中访问的外部变量必须是final或者effectively final的。Lambda表达式中访问的外部变量不能被修改,即不能对外部变量进行赋值操作。
方法重载
使用 Lambda 表达式时,调用一个类中的重载方法,且方法中的参数都为函数式接口时,编译器会报错。因为编译器无法推断 Lambda 表达式的类型。
方法引用
Lambda 表达式的方法引用是一种更简洁的 Lambda 表达式的写法,可以直接引用已有方法或者构造方法。
方法引用的语法是 类名::方法名,其中 :: 是方法引用运算符,左边是类名或者对象名,右边是方法名。
方法引用的类型:
静态方法引用:
类名::静态方法实例方法引用:
对象名::实例方法构造方法引用:
类名::new
如果函数的参数超过2个,就需要自己创建一个函数式接口。
类型检查
Lambda 表达式的类型检查是通过上下文推断来实现的,Lambda 表达式的类型是通过上下文推断出来的,而不是通过 Lambda 表达式的参数类型来推断的。
类型转换
Lambda 表达式的类型转换是通过强制类型转换来实现的,Lambda 表达式的类型是通过上下文推断出来的,而不是通过 Lambda 表达式的参数类型来推断的。
错误处理
Lambda 表达式中的代码可能会抛出异常,但是 Lambda 表达式中不能使用 throws 关键字来声明异常,因为函数式接口中的抽象方法没有声明异常。
Lambda 表达式中的异常处理有以下几种方式:
使用
try-catch语句捕获异常。使用
Callable函数式接口,将Lambda表达式的返回值改为Callable类型,然后在call方法中捕获异常。使用自定义函数式接口,将 Lambda 表达式的抽象方法声明异常。
最后更新于
这有帮助吗?