zoukankan      html  css  js  c++  java
  • Java——Lambda表达式

    其实是在学习Lambda表达式过程中对于接口作为方法参数的使用产生了一些疑问,在这里记下:

     1 /**
     2  * Created by BoGummyYoung on 2017/2/20.
     3  * 示范Lambda表达式的几种简化写法
     4  */
     5 interface Eatable
     6 {
     7     void taste();
     8 }
     9 interface Flyable
    10 {
    11     void fly(String weather);
    12 }
    13 interface Addable
    14 {
    15     int add(int a, int b);
    16 }
    17 public class LambdaQS
    18 {
    19     //调用该方法需要Eatable对象
    20     public void eat(Eatable e)
    21     {
    22         System.out.println(e);
    23         e.taste();
    24     }
    25     //调用该方法需要Flyable对象
    26     public void drive(Flyable f)
    27     {
    28         System.out.println("我正在驾驶:" + f);
    29         f.fly("【碧空如洗的晴日】");
    30     }
    31     //调用该方法需要Addable对象
    32     public void test(Addable add)
    33     {
    34         System.out.println("5 与 3的和为:" + add.add(5,3));
    35     }
    36     public static void main(String[] args)
    37     {
    38         LambdaQS lq = new LambdaQS();
    39         //Lambda表达式的代码块只有一条语句,可以省略花括号
    40         lq.eat(() -> System.out.println("苹果的味道不错!"));
    41         //Lambda表达式的形参列表只有一个形参,可以省略圆括号
    42         lq.drive(weather ->
    43         {
    44             System.out.println("今天的天气是:" + weather);
    45             System.out.println("直升机飞行平稳");
    46         });
    47         lq.drive(new Flyable(){
    48 
    49             @Override
    50             public void fly(String weather) {
    51                 System.out.println("今天的天气是:" + weather);
    52                 System.out.println("直升机飞行平稳");
    53             }
    54         });
    55         //Lambda表达式的代码块只有一条语句,可以省略花括号
    56         //代码块中只有一条语句,即使该表达式需要返回值,也可以省略return关键字
    57         lq.test((a , b) -> a+b);
    58     }
    59 }

    此处的运行结果:

    Q:关于重写方法里面的weather和drive方法里的f.fly("【碧空如洗的晴日】");定义的weather关系。

    A:首先,drive方法里面接受一个Flyable类型的参数f,然后执行的f.fly方法,但是这个fly方法具体要执行的内容,就是重写的内容。

    还是直接贴图方便。

    总结一下就是weather在drive中调用f.fly方法的时候已经定义,而这个fly方法要实现就要在调用drive方法的时候重写,此时的重写不会改变weather的值,默认即是在drive中定义的weather的值。

    除非重新再调用drive的时候定义weather的值,才会改变weather的值,如下:

    lq.drive(new Flyable(){
    
                @Override
                public void fly(String weather) {
                    weather = "我是改了的天气";
                    System.out.println("今天的天气是:" + weather);
                    System.out.println("直升机飞行平稳");
                }
            });

    这时的运行结果为:

  • 相关阅读:
    商品表(spu)、规格表(sku)设计
    Links
    About
    AFO
    口胡题
    NOIP2014 飞扬的小鸟
    CSP2019 Emiya 家今天的饭
    CSP2019 括号树
    CSP-J2019 加工零件
    CSP-J2019 纪念品
  • 原文地址:https://www.cnblogs.com/bolumiere/p/6420389.html
Copyright © 2011-2022 走看看