zoukankan      html  css  js  c++  java
  • Java 从匿名内部类到Lambda表达式

    匿名内部类和Lambda表达式有很多类似之处,首先都是在使用的时候才对接口进行实现,只是Lambda接口中只能由一个需要被实现的方法。

    所有的Lambda表达式都可以 由匿名内部类改写:

    interface Face1{
        //无参数无返回值
        public  void face();
    }
    
    interface Face2{
        //有一个参数无返回值
        public void face(int a);
    }
    
    interface Face3{
        //有一个参数,有一个返回值
        int face(int a);
    }
    
    interface Face4{
         //有两个参数,有一个返回值
        int face(int a,int b);
    }
    
    public class Test  
    {
        public static void main (String[] args) throws java.lang.Exception
        {
            //        匿名内部类 实现接口
            Face1 fn1=new Face1(){public void face(){System.out.println("匿名内部类 fn1");}};
            fn1.face();
            
            Face2 fn2=new Face2(){public void face(int a){System.out.println("匿名内部类 fn2 "+a);}};
            fn2.face(10);
            
            Face3 fn3=new Face3(){public int face(int a){return a*a;}};
            System.out.println("匿名内部类 fn3 :"+fn3.face(10));
            
            Face4 fn4=new Face4(){public int face(int a,int b){return a+b;}};
               System.out.println("匿名内部类 fn4 :"+fn4.face(10,9));
            
    
    
            //        Lambda表达式 实现接口
            Face1 fl1=()->{System.out.println("Lambda表达式 fl1");};
            fl1.face();
            
            Face2 fl2=(a)->{System.out.println("Lambda表达式 fl2:"+a);};
            fl2.face(10);
            
            Face3 fl3=(a)->{return a*a ;};
            System.out.println("Lambda表达式 fl3:"+fl3.face(10));
            
            Face4 fl4=(a,b)->a+b;
            System.out.println("Lambda表达式 fl4:"+fl4.face(10,9));
        }
    }

    运行结果:

    匿名内部类 fn1
    匿名内部类 fn2 10
    匿名内部类 fn3 :100
    匿名内部类 fn4 :19
    Lambda表达式 fl1
    Lambda表达式 fl2:10
    Lambda表达式 fl3:100
    Lambda表达式 fl4:19

    Lambda表达式 在一定程度上是在匿名内部类的基础上进行代码简化(但是编译的方式不同):

    Lambda的形式如: (参数)->{方法体}

    1、当只有一个参数的时候可以把() 省略掉。

    2、当方法体只有一条语句的时候 可以把 return关键词和{} 省略掉。

  • 相关阅读:
    正则表达式
    webfrom 母版页
    repeater的command事件用法
    JVM进程cpu飙高分析
    @Transactional导致无法动态数据源切换
    mysql分页查询优化(索引延迟关联)
    MAC下安装Homebrew 和 @权限的问题
    RabbitMQ安装以及集群部署
    RabbitMQ 延时消息队列
    java 实现生产者-消费者模式
  • 原文地址:https://www.cnblogs.com/easyidea/p/14096094.html
Copyright © 2011-2022 走看看