对比学习JAVA的Lambda表达式

也许你看到用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深度学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容