创建函数式接口的对象
首先,什么是函数式接口
如果一个接口中只有唯一一个抽象方法,那称它为函数式接口
通过外部类实现接口
是最原始最经典的方式,写一个独立的类来实现接口,这是实现所有接口的正常做法
public class DemoLambda {
public static void main(String[] args) {
Func lambda = new Lambda();
lambda.lambda(); //好好学习!
}
}
//接口
interface Func {
void lambda();
}
//实现类
class Lambda implements Func {
@Override
public void lambda() {
System.out.println("好好学习!");
}
}
静态内部类实现接口
将实现类放在类里面,增加可读性
public class DemoLambda {
static class Lambda implements Func{
@Override
public void lambda() {
System.out.println("好好学习!");
}
}
public static void main(String[] args) {
Func lambda = new Lambda();
lambda.lambda();
}
}
interface Func {
void lambda();
}
局部内部类实现接口
将实现类放在方法里面,进一步增加可读性
public class DemoLambda {
public static void main(String[] args) {
class Lambda implements Func{
@Override
public void lambda() {
System.out.println("好好学习!");
}
}
Func lambda = new Lambda();
lambda.lambda();
}
}
interface Func {
void lambda();
}
匿名内部类实现接口
把实现类直接写在接口实例化的语句中,更加方便
public class DemoLambda {
public static void main(String[] args) {
Func lambda = new Func() {
@Override
public void lambda() {
System.out.println("好好学习!");
}
};
lambda.lambda();
}
}
interface Func {
void lambda();
}
此时IDEA已经提示匿名内部类可以用lambda表达式代替,因为Func接口是一个函数式接口
使用lambda表达式实现接口
当接口是一个函数式接口时,可以直接使用lambda表达式实现,节省代码量
public class DemoLambda {
public static void main(String[] args) {
Func lambda = () -> { //lambda表达式
System.out.println("好好学习!");
System.out.println("天天向上!");
};
lambda.lambda();
}
}
interface Func {
void lambda();
}
其中:
- 小括号中是实现类中的方法的形参,可以省略数据类型,如果只有一个形参,可以将小括号直接省略
- 大括号是实现类中方法的方法体,如果方法体只有一句,可以将大括号直接省略