最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Java中 接口怎么配合 Lambda 表达式简化匿名内部类实现
时间:2026-07-14 09:35:45 编辑:袖梨 来源:一聚教程网
Java中接口配合Lambda表达式简化匿名内部类的前提是该接口必须为函数式接口,即仅含一个抽象方法;Lambda本质是该抽象方法的简洁实现,可替代冗长的匿名内部类写法,如Runnable、Comparator等均属此类。
Java 中接口配合 Lambda 表达式简化匿名内部类,核心前提是该接口必须是函数式接口——即只定义了一个抽象方法(允许有默认方法或静态方法)。Lambda 表达式本质就是这个抽象方法的简洁实现,替代了冗长的匿名内部类写法。
函数式接口是前提
只有被 @FunctionalInterface 标注(或实际满足条件)的接口才能用 Lambda。例如:
-
Runnable:只有run() -
Comparator<T>:只有compare(T, T) -
Function<T,R>:只有apply(T)
如果你自定义接口,确保它只有一个抽象方法,否则编译报错。
Lambda 替代匿名内部类的写法对比
以启动线程为例:
立即学习“Java免费学习笔记(深入)”;
传统匿名内部类:
new Thread(new Runnable() {public void run() {
System.out.println("Hello");
}
}).start();
等价的 Lambda 写法:
new Thread(() -> System.out.println("Hello")).start();关键变化:
- 省去
new Runnable()和public void run()声明 - 参数列表、箭头
->、方法体直接对应抽象方法的签名 - 当方法体只有一条语句,可省略花括号和
return(若需返回值)
带参数和返回值的 Lambda 示例
比如使用 Comparator 排序:
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
});
换成 Lambda:
list.sort((s1, s2) -> s1.length() - s2.length());说明:
- 参数类型可省略(编译器能推断),如
(String s1, String s2)可简写为(s1, s2) - 如果只有一行表达式,直接写结果;如果是代码块,需加花括号和
return
自定义函数式接口 + Lambda
定义一个简单接口:
@FunctionalInterfaceinterface Calculator {
int operate(int a, int b);
}
使用时直接传 Lambda:
Calculator add = (x, y) -> x + y;Calculator multiply = (x, y) -> x * y;
System.out.println(add.operate(3, 4)); // 输出 7
这样既保持接口的语义清晰,又避免了每次 new 实现类的样板代码。
相关文章
- 以下哪种职业的执业人员具有审计签字权 蚂蚁新村今日答案2026.1.14 07-14
- 蚂蚁新村今日答案1.14 07-14
- 蚂蚁新村2026年1月14日答案最新 07-14
- 蚂蚁庄园小鸡答题今日答案2026年1月15日 07-14
- 蚂蚁庄园今日最新答案1.15 07-14
- 蚂蚁庄园今日答案最新2026.1.15 07-14