1. 写在前面
为什么扯到了lambda?其实也是和Runnable接口有关系。其实,Runnable是一个函数式接口,可以用lambda表达式来创建其对象。
2. lambda表达式简介
总体来说,lambda属于函数式编程的概念,它可以避免匿名内部类定义过多,也可以简化代码。
关于函数式编程的概念,对我来说还算模糊,所以不在这里误导大家了,那么函数式接口,是什么意思呢?其实,函数式接口,就是只包含一个抽象方法的接口。两个重点,“一个”还有“抽象”。
那么,对于函数式接口,我们就可以使用lambda表达式来创建该接口的对象
3. 看个例子吧
其实在这里,最经典的例子,还是Runnable接口。我们可以看下Runnable接口的定义
在这个接口里面,只有一个抽象方法
run,所以Runnable接口就是一个函数式接口。那么我们怎么通过lambda表达式进行简化呢
不用lambda表达式,怎么创建线程(匿名内部类)
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("我是线程");
}
});
用lambda表达式,怎么创建线程
Thread thread = new Thread(() -> System.out.println("我是线程"));
thread.start();
我们发现,直接用一对括号表示参数,加个箭头,指向函数体,就可以不用写一个匿名内部类了。
4. 还不懂?没关系,我们再看个例子
首先我们定义一个函数式接口。
interface MyInterface {
public abstract void doSomething(int a);
}
用匿名内部类创建其对象
MyInterface myInterface = new MyInterface() {
@Override
public void doSomething(int a) {
System.out.println("做点啥吧");
}
};
myInterface.doSomething(1);
用lambda表达式创建其对象
MyInterface myInterface = (int a) -> System.out.println("做点啥吧");
myInterface.doSomething(1);
其实这里的lambda表达式还可以简化,并且当函数体不只是一行代码的时候,花括号也不可省略了。但细节的就不再多介绍了,毕竟,这里只是一个入门文章,只要懂了lambda表达式怎么来的,以及它的定义,那这篇文章就实现它的价值了。
5. 总结一下
Runnable是一个函数式接口,在创建对象时可以用lambda表达式简化,lambda表达式既可以避免匿名内部类定义过多,也可以用来简化代码。