借助Java 8的全新语法,实现Runnable
接口的匿名内部类写法可以通过更简单的Lambda表达式达到等效:public class LambdaRunnable {
public static void main(String[] args) {
new Thread(()->{
System.out.println("多线程任务执行");
}).start(); // 启动线程
// new Thread(()->System.out.println("多线程任务执行")).start();
}
}
不再有“不得不创建接口对象”的束缚,不再有“抽象方法覆盖重写”的负担,就是这么简单!
其实上述Lambda表达式写法可以按照如下写法:
Runnable r = ()->{
System.out.println("多线程任务执行");
};
Lambda省去面向对象的条条框框,格式由3个部分组成:
一些参数
一个箭头
一段代码
Lambda表达式的标准格式为:
(参数类型 参数名称) -> { 代码语句 }
小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
->
是新引入的语法格式,代表指向动作。大括号内的语法与传统方法体要求基本一致。
- Lambda的使用前提
- Lambda的语法非常简洁,完全没有面向对象复杂的束缚。但是使用时有几个问题需要特别注意:
-
使用Lambda必须具有接口,且要求接口中有且仅有一个抽象方法。无论是JDK内置的
Runnable
、Comparator
接口还是自定义的接口,只有当接口中的抽象方法存在且唯一时,才可以使用Lambda。使用Lambda必须具有上下文推断。也就是方法的参数类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。