匿名内部类:
@FunctionalInterface
interface IComputer {
void add(int a, int b);
}
public class Test {
public static void main(String[] args) {
IComputer computer = new IComputer() {
@Override
public void add(int a, int b) {
System.out.println(a + b);
}
};
computer.add(1, 1);
}
}
首先我们观察上边代码,我们发现是接口的实现内部类,内部类重写add方法要进行至少四行的操作。
Lambda 表达式:
@FunctionalInterface
interface IComputer {
void add(int a, int b);
}
public class Test {
public static void main(String[] args) {
IComputer computer = (int a, int b)-> {
System.out.println(a + b);
};
computer.add(1, 1);
}
}
Lambda表达式实现刚刚要进行的操作最多需要三步,简化了代码。实际上Lambda可以将以上的代码简化成一行。
IComputer computer = (a, b)-> System.out.println(a + b);
省略了花括号,省略了数据类型,将方法体与实例化对象提到了一行。这样代码就简化成了一行。
所以Lambda表达式存在的意义就是简化代码。它的出现简化了函数式接口匿名内部类的语法。
因为函数式接口只有一个抽象方法。
如果方法没有返回值且只有一行代码,则Lambda表达式语法可以是这种形式:([参数1], [参数2], [参数3],.... [参数n])->单行语句
如果方法有返回值且只有一行代码,则Lambda表达式语法可以是这种形式:([参数1], [参数2], [参数3],.... [参数n])->表达式