浅谈Java8新增的Lambda表达式

557 阅读2分钟

这是我参与更文挑战的第8天,活动详情查看: 更文挑战

Lambda表达式入门

Lambda表达式的主要作用就是代替匿名内部类的烦琐语法。 它由三部分组成:分别是形参列表、箭头、代码块。

咱们先来看一个例子然后来简单了解一下Lambdapublic class Test {
	public static void main(String[] args) {
		new Thread(new Runnable() {
			@Override
			public void run() {
				System.out.println("我是匿名类");
			}
		});
		//大家可以看到,上面的方法只是要打印一句话,但是代码很长,
		// 这时我们就可以使用Lambda表达式来替换
		new Thread(() -> System.out.println("我是Lambda"));
		//这样写是不是简洁多了?
	}
}

体会到了Lambda表达式的强大,那我们来了解lambda的基本语法。

lambda表达式的语法

Lambda表达式实际上就是函数。
一般函数的定义为
int sub(int a,int b){
    return a-b;
}
而lambda表达式的定义没有类型和函数名。
(参数...)->{
    方法体
}

lambda表达式语法详解

1. Lambda表达式的形参列表允许省略,如果形参列表只有一个参数,那么小括号也可以直接
省略。
2. 箭头必须是英文中画线号和大于号组成
3. 如果方法体中只有一条语句,允许省略大括号。如果只有一条return语句,可以省略return关键字

Lambda表达示与函数式接口

Lanbda表达式的类型必须是函数式接口,函数式接口代表一个抽象方法的接口,函数式接口可以包含多个默认方法,类方法,但只能有一个抽象方法。

Lambda表达式实现的是匿名方法,因此它只能实现特定函数式接口的中的唯一方法。
因此Lambda表达式由两个限制
1. Lambda表达式的目标类型必须是明确的函数式接口
2. Lambda表达式只能为函数式接口创建对象。Lambda表达式只能为只有一个抽象方法的
接口创建对象。

为了保证lambda表达式的限制通常有下面三种方式:
1. 将Lambda表达式赋值给函数式接口类型的变量。
2. 将Lambda表达式作为函数式接口类型,传给某个方法。
3. 使用函数式接口对Lambda表达式进行强制类型转换。

需要值得注意的是:lambda表达式的参数类型和个数必须和函数式接口中的抽象方法有相同的形参列表。

以上就是我对Lambda表达式的一些浅见,如有不足或错误之处欢迎大家留言评论。

Lambda表达式的作用还不止与此,下期我们来更深入的学习Lambda的其他用法。