Java中接口配合Lambda表达式简化匿名内部类的前提是该接口必须为函数式接口,即仅含一个抽象方法;Lambda本质是该抽象方法的简洁实现,可替代冗长的匿名内部类写法,如Runnable、Comparator等均属此类。
Java 中接口配合 Lambda 表达式简化匿名内部类,核心前提是该接口必须是函数式接口——即只定义了一个抽象方法(允许有默认方法或静态方法)。Lambda 表达式本质就是这个抽象方法的简洁实现,替代了冗长的匿名内部类写法。
只有被 @FunctionalInterface 标注(或实际满足条件)的接口才能用 Lambda。例如:
Runnable:只有 run()
Comparator<T>:只有 compare(T, T)
Function<T,R>:只有 apply(T)
如果你自定义接口,确保它只有一个抽象方法,否则编译报错。
以启动线程为例:
立即学习“Java免费学习笔记(深入)”;
传统匿名内部类:
new Thread(new Runnable() {等价的 Lambda 写法:
new Thread(() -> System.out.println("Hello")).start();关键变化:
new Runnable() 和 public void run() 声明->、方法体直接对应抽象方法的签名return(若需返回值)比如使用 Comparator 排序:
换成 Lambda:
list.sort((s1, s2) -> s1.length() - s2.length());说明:
(String s1, String s2) 可简写为 (s1, s2)
return
定义一个简单接口:
@FunctionalInterface使用时直接传 Lambda:
Calculator add = (x, y) -> x + y;这样既保持接口的语义清晰,又避免了每次 new 实现类的样板代码。