也许你看到用Lambda+RxJava写出的代码很飘逸,逼格很高。恨不得马上用到项目上,但你的Leader同意了吗。
Lambda表达式:简化创建函数式接口的代码。它只是单纯的减少代码量而已。
函数式接口:可以包含多个默认方法,类方法,但是只能申声明一个抽象方法。
下面是关于Lambda表达式的用法实例,也会放上原来的匿名类的写法做对比,便于理解,为什么要慎用。
先准备几个接口,针对Lambda表达式的语法,提供不同的形参个数
//食物 规范
interface Eatable
{
//提供味道方法 形参 无
void taste();
}
//鸟
interface Bird
{
//飞 形参 天气
void fly(String weather);
}
//加法
interface Addable
{
// 形参 a b
int calculate(int a, int b);
}
- 在主类中定义几个方法,参数设置为上面的接口对象
void eat(Eatable e){
System.out.println("用到了食物"+e.toString());
e.taste();
}
void playFly(Bird b){
System.out.println("捉到一只鸟"+b);
b.fly("天气蓝天白云");
}
void calculate(Addable a){
System.out.println("两种方式 计算 "+a.calculate(5,3));
}
- 使用Lambda表达式和匿名内部类来传参
class LambdaLearn
{
public static void main(String[] args)
{
LambdaLearn ll = new LambdaLearn();
ll.eat(()-> System.out.println("Lambda 的味道不错"));
//上面我们调用eat()方法,接口Eatable ,无形参,无返回,不需要{},可省略
//匿名内部类写法
ll.eat(new Eatable(){
public void taste(){
System.out.println("Lambda 的味道不错");
}
});
//有一个形参
ll.playFly(a -> {
System.out.println("用Lambda 表达式 起飞了 天气是"+a);
});
//匿名内部类写法
ll.playFly(new Bird(){
public void fly(String weather){
System.out.println("用 匿名内部类 起飞了 天气是"+weather);
}
});
ll.calculate((a,b)->a+b);
//两个形参 ,并且有返回值
//匿名内部类写法
ll.calculate(new Addable(){
public int calculate(int a,int b){
return a+b;
}
});
}
- 上面的对比非常明显,代码量的缩减也是非常明显的。但是问题也暴露出来了, 其他人来读这段代码的时候,无法从类和方法上快速的理解你的代码含义,代码维护起来将非常困难,会给项目带来非常大的隐患。
- 所以:你的Leader同意你在项目中使用Lambda表达式了吗?
参照:《JAVA讲义3》-李刚 适合JAVA深度学习