Java学习笔记(9)

Posted on 2019-03-19 14:13  Rock Wang  阅读(22)  评论(0编辑  收藏

lambda表达式:

只定义了单个方法的接口,称为单一抽象方法(Single Abstract Method, SAM)接口;由于此接口通过调用,完成某一功能,所以也称为功能接口,此类接口的实例称为功能对象

lambda表达的作用是相当于一个函数,编译器把lambda表达式编译为一个对象,该对象是一个内部匿名类的实例,此匿名类实现了功能接口,只有一个方法,此方法的参数即为lambda表达式的参数,此方法的方法体即为lambda表达式的方法体

由上述可以推出如下结论:如果一个方法的参数是功能接口类型,可以用lambda表达式作为参数传给此方法

 

所以如果一个方法的接收参数为功能接口类型,可以通过如下三种方式传参数,其中接口上@FunctionInterface注释,表明该接口是一个功能接口

 1 public void Run(){
 2         setAction(new InnerClass());
 3 
 4         setAction(new T1() {
 5             @Override
 6             public void test() {
 7                 System.out.println("匿名类方式");
 8             }
 9         });
10 
11         setAction(() -> System.out.println("lambda表达式方式"));
12     }
13 
14     public void setAction(T1 t1) {
15         t1.test();
16     }
17 
18     class InnerClass implements T1 {
19         @Override
20         public void test() {
21             System.out.println("内部类方式");
22         }
23     }
24 
25     @FunctionalInterface
26     interface T1 {
27         void test();
28     }