这是一个匿名内部类的定义,IComputer是一个函数式接口,匿名内部类作为实现类将add方法实现:
interface IComputer{
int add(int a,int b);
}
public class Test {
public static void main(String[] args) {
IComputer computer = new IComputer() {
@Override
public int add(int a,int b) {
return a+b;
}
};
}
}
Lambda表达式的作用就是将函数式接口匿名内部类的定义简化
因为函数式接口中只有一个抽象函数,所以第一步简化可以将定义简化成这样:
interface IComputer{
int add(int a,int b);
}
public class Test {
public static void main(String[] args) {
IComputer computer = (int a,int b)->{
return a+b;
};
}
}
这时因为函数体中只有一条有效代码,且是返回值语句,所以下一步可以简化成这样:
interface IComputer{
int add(int a,int b);
}
public class Test {
public static void main(String[] args) {
IComputer computer = (int a,int b)->a+b;
}
}
但如果函数体中有多条语句的话就不能简化第二步了。
如果函数体只有一条有效代码但是不是返回值,那是否可以进行第二步简化呢?答案是可以的,只需将那一行代码写在->后面即可:
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);
}
}