尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

个人学习匿名内部类转lambda表达式转方法引用运算符的一个记录 - 亚麻青

个人学习匿名内部类转lambda表达式转方法引用运算符的一个记录 - 亚麻青
📅 发布时间:2026/6/20 8:43:55

首先我先来讲一下匿名内部类。
匿名内部类是内部类的一种,他的特点是无名字,直接进行实例化操作,最常见的就是接口和/抽象类的实例化。
使用条件:1、必须继承一个类或者实现一个接口。2、只能实现单继承。3、必须创建实例。4、当在类或者接口中有多个方法时必须全部重写.5、不能定义构造方法
例如:
public static void main(String[] args) {
B b = new B();
b.a();
}
public interface A{
void a();
}
public static class B implements A{
@Override //如果我们要实现接口或者抽象类就必须重写他们的方法
public void a() {
System.out.println("a");
}
}
}
在上面我们要去new一个对象出来,然后创建了一个类去实现了这个接口的方法,但在实际的代码编写中,如果是只需要实现一次的代码我们就可以使用匿名内部类来实现他的功能,避免创造太多的类。
public static void main(String[] args) {
A a1 = new A(){
@Override
public void a(){
System.out.println("aaaaaaaaa");
}
};
a1.a();
}

public interface A{void a();
}

然后对于我们来说,匿名内部类的内容显得还是太过臃肿,不太美观,此时我们可以采用lambda表达式来优化匿名内部类的表达。
lambda表达式的格式:类 定义变量=(参数列表)->{表达式的主体}
有以下这些情况可以省略部分内容:
// 1. 一个参数,可省略括号
x -> x * x
// 2. 多个参数
(int a, int b) -> a + b
// 3. 带代码块
(String s) -> {
System.out.println(s);
return s.length();
}
// 4. 参数类型可推断(常用写法)
(a, b) -> a.compareTo(b)
lambda表达式的使用限制:1、只能用于函数式接口(只有一个抽象方法)。2、局部变量必须是final或者等效final,即在lambda表达式中不可以修改的量。3、不能与外部变量有同名的参数,外面有一个nub在表达式中就不允许再出现一个nub。4、无法使用this直接引用自身。
lambda表达式在对匿名内部类优化时的限制:1、只能替代只有单个抽象方法的接口。2、无法访问重写的默认方法。3、无法包含实例字段
现在知道了lambda表达式的格式和限制让我们来实现利用lambda表达式优化匿名内部类
例:
public static void main(String[] args) {
A a = ()->{System.out.println("aaaa");};
a.a();
}
public interface A{
void a();
我们从上面可以看到lambda表达式简化了很多行代码,使代码更加简洁。lambda中还有很多的函数可以供我们来直接使用,这里就不一一列举了,我们可以利用方法引用更进一步的去简化代码。
当我们看到::这个符号时我们就可以想到这里运用了方法引用的方法对代码进行了简化
方法引用的格式:目标引用::方法名
在使用方法的引用的时候,必须是前面的lambda表达式实现了方法,才能使用方法引用对表达式进行简化。
例:
Arrays.sort(students, (o1, o2) -> Double.compare(o1.getHeight(), o2.getHeight()));
这里是使用了Array类里的sort方法,有多个参数lambda表达式改变格式,将学生集合以及学生o1,o2传入。使用Double.compare(x,y)方法,比较两个double数值的大小,通过两个学生的身高(get方法获得)进行排序,这里为什么是升序排序呢??Arrays.sort()方法带compare比较器,会根据比较的定义来排序,这里将o1和o2的位置互相转换就会得到降序排序。为什么会这样呢?首先假设他们两个物理上就是o1在前,o2在后,如果比较器中按(o1,o2)来排序,o1大于o2返回正数,那么物理上的o1就会跑到物理上的o2后面,形成大的在后的场景,就是升序,反之,(o2,o1),当o2大于o1时,返回正数,o2和o1调换物理上的位置,大的在前面。
现在将他们进行::简化
Arrays.sort(students::t.compare);

以上只是我个人想法,可能有误,欢迎随时指正。

相关新闻

  • OWASP Java HTML 清理库曝出 XSS 漏洞:noscript 与 style 标签组合成隐患
  • 敏捷冲刺日志 - Day 4
  • 敏捷冲刺日志 - Day 2

最新新闻

  • 2026 武汉本地正规瓷砖空鼓维修服务商盘点|无损免拆砖修复,全域上门售后有保障 - 宅安选房屋修缮
  • 动态主题建模中的异常值识别与前瞻信号分析
  • Qwen2.5-VL工业多模态微调实战:特殊行业数据适配指南
  • STM32 串口DMA+IDLE中断实战:高效数据帧接收与协议解析
  • 术语俗话 --- 驱动/固件/软件
  • 中原卖黄金避坑要点,实体店资质辨别教程合扬全程公开鉴价 - 奢侈品交易观察员

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号