函数式编程思想:
只要能获取到结果,谁去做的,怎么做的都不重要,重视的是结果,不是过程;将怎么做回归到做什么的本质
07-2 Runnable接口实现多线程
代码分析:
对于Runnable
的匿名内部类,分析出几点内容:
* Thread
类需要Runnable
接口做为参数,其中的抽象run
方法中编写线程任务代码
* 为了实现run
方法体,不得不需要Runnable
接口的实现类
* 可以使用匿名内部类代替RunnableImpl
具体实现类
* 必须覆盖抽象的run方法,名称方法参数返回值等都需要写一遍,而且不能写错
* 实际上,只有方法体才是关键
//Lambda表达式的实现,组成部分
1. 一些参数
2. 一个箭头
3. 一段代码
(参数类别)->{一些重写方法的代码}
new Thread(()->{
System.out.println("似乎只有这个run方法是核心");
}).start();
同样的语义,使用Lambda
语法更简单
()-> System.out.println("似乎只有这个run方法是核心")
- 前面的一对小括号即run方法的参数(无),代表没有参数
- 中间的一个箭头代表将前面的参数传递给后面的代码
- 后面的大括号
{}
重写接口的抽象方法的方法体,输出语句是具体的业务逻辑
07-3 Lambda表达是举例
//无参数无返回值-----------------------------------
new Thread(runnableImpl).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("似乎只有这个方法体才是核心");
}
}).start();
//有参数有返回值-----------------------------------
//匿名内部类实现
invlckCal(10, 20, new Calculator() {
@Override
public int Calculator(int a, int b) {
return a+b;
}
});
//Lambada,实现带参数带返回值(这个调用的方法体有参数)
invlckCal(10,20,(int a,int b)->{
return a+b;
});
//优化格式
invlckCal(10,20,( a, b)->
a+b
);
//上面调用的方法
public static void invlckCal(int a,int b,Calculator calculator){
int sum = calculator.Calculator(a, b);
System.out.println("计算方法 被调用"+sum);
}
07-3 Lambda省略
- Lambda表达式是可以推到可以省略的
- 凡是可以根据上下文推到出来的内容都可以省略不写
可以省略的内容:- (参数列表):括号中参数列表的数据类型可以省略不写
- (参数列表):括号中的参数只有一个,那么参数类型和()都可以省略不写
- {一些代码}:如果{}中的代码只有一行,无论有返回值,可以省略{},return,分号,要一起省略
使用的前提:
- 使用Lambda必须具有接口,而且要求接口中有且仅有一个抽象方法
- 使用Lambda必须具有上下文推断能力
备注:有且仅有一个抽象方法的接口,称为函数式接口