java 中的lambda表达式


  java8新发布特性,lambda是以简短的代码实现逻辑的形式,如 x-> x +1。下面看个例子来说明表达式如何工作的,开启一个线程并运行方法

  java8之前做法:

  new Thread(new Runable() {

    @Overide

    public void run() {

      System.out.println("run...");

    }

  }).start();

  java8之后做法:

  new Thread(() -> { System.out.println("run..."); }).start();

 

  由上可看出,lambda代码要少很多,还很优雅,容易理解。

  lambda定义形式:

  (参数类型 x, 参数类型 y) -> { 业务代码体 }  

 

  例:

  接口1:

  interface Test {

    int run(int x, int y); 

  } 

  

  class TestCC {

    static void exec(Test test) {

      test.run(10, 30);

    }

  }

  TestCC.exec((int x, int y) -> x + y); // 如果只有一行,则不需要{ } ,里面执行的结果就是返回值。也可以不用写参数类型,直接写x, y。如果无任何参数则()即可。如果有多行代码体,则用 {}括起来,并用return 返回值。

  以上代码编译器会自动找到Test的run方法进行匹配实现,如果接口中有多个方法,则编译器会报错,因为表达式不知道匹配哪个方法,除非使用default。

  

  表达式优点:代码简洁,美观,优雅。

  表达式缺点:接口必须只有一个非default方法;定义了一个方法,以后就不能扩展接口方法,不然在客户端调用的所有表达式都会出错,所以这只能适用于接口方法非常固定的情况下,我建议还是写多点代码增加灵活性。而C#则无此问题,因为C#不是用接口实现,是用委托实现,委托只对应一种类型方法。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM