lambda

66 阅读1分钟

必须要求

定义一个只有一个方法的接口

lambda的前置条件-接口定义

interface ILike {
  void lambda(int i, char letter);
}

lambda的演变

    1. 实现类
    1. 静态内部类
    1. 局部内部类
    1. 匿名内部类
    1. lambda
    1. 当lambda的内容体只有一行时
    1. 省略参数类型(要么都省略,要么都加上),单个参数可以省略掉括号
/**
 * 1. 实现类
 */
class Like1 implements ILike {

    @Override
    public void lambda(int i, char letter) {
        System.err.println("lambda " + i + " " + letter);
    }
}
/**
 * lambda的产生过程(逐步简化)
 */
public class Demo1 {
    static class Like2 implements ILike {
        @Override
        public void lambda(int i, char letter) {
            System.err.println("lambda " + i + " " + letter);
        }
    }

    public static void main(String[] args) {
        // 1.实现类
        ILike like = new Like1();
        like.lambda(1, 'A');

        // 2.静态内部类
        like = new Like2();
        like.lambda(2, 'B');

        // 3.局部内部类
        class Like3 implements ILike {
            @Override
            public void lambda(int i, char letter) {
                System.err.println("lambda " + i + " " + letter);
            }
        }
        like = new Like3();
        like.lambda(3, 'C');

        // 4.匿名内部类,没有类的名称,必须借助接口或父类
        like = new ILike() {
            @Override
            public void lambda(int i, char letter) {
                System.err.println("lambda " + i + " " + letter);
            }
        };
        like.lambda(4, 'D');

        // 5.lambda
        like = (int i, char letter) -> {
            System.err.println("lambda " + i + " " + letter);
        };
        like.lambda(5, 'E');

        // 6. lambda的内容体只有一行时
        like = (int i, char letter) -> System.err.println("lambda " + i + " " + letter);
        like.lambda(6, 'F');

        // 7. 简化参数,单个参数甚至可以简化掉括号
        like = (i, letter) -> System.err.println("lambda " + i + " " + letter);
        like.lambda(7, 'G');

    }
}