编程思想转换&体验Lambda的更优写法和Lambda标准格式
编程思想转换&体验Lambda的更优写法
做什么, 而不是怎么做
是希望创建一个匿名内部类对象吗?只是为了做这件事情而不得不创建一个对象。
真正希望做的事情是:将run方法体内的代码传递给Thread类知晓。
传递一段代码--这才是我们真正的目的。而创建对象只受限于面向对象语法而不得不采取的一种手段方式。
将关注点从“怎么做”回归到“做什么”本质上,就会发现只有能更好地达到目的,过程与形式其实并不重要。
public static void main(String[] args) { //使用匿名内部类的方式, 实现多线程 new Thread(new Runnable() { @Override public void run() { System.out.println(Thread.currentThread().getName()+"新线程创建了"); } }).start(); //使用lambda表达式,实现多线程 new Thread(()->{ System.out.println(Thread.currentThread().getName()+"新线程创建了"); }).start(); }
Lambda标准格式
匿名内部类的好处与弊端
匿名内部类可以帮我们省去实现类的定义;另一方面,匿名内部类的语法--确实太复杂了
语义分析
Runnable接口只有一个run方法的定义:
public abstract void run();
即制定了一种做事情的方案(其实就是一个函数):
>无参数:不需要任何条件即可执行该方案。
>无返回值: 该方案不产生任何结果。
>代码块(方法体) : 该方案的具体执行步骤。
同样的语义体现在Lambda语法中, 需更加简单:
() -> System.out.println("多线程任务执行!")
前面的一对小括号即run方法的参数(无),代码不需要任何条件;
Lambda表达式的标准格式:
由三部分组成:
a.一些参数
b.一个箭头
c.一段代码
格式:
(参数列表) -> {一些重写方法的代码};
解释说明格式:
(): 接口中抽象方法的参数列表,没有参数,就空着; 有参数就写出参数,多个参数使用逗号分隔
->:传递的意思, 把参数传递给方法体{}
{} : 重写接口的抽象方法的方法体