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("直升机飞行平稳");
            }
        });

这时的运行结果为:

原文地址:https://www.cnblogs.com/bolumiere/p/6420389.html