Java方法引用
2 方法引用
- 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作
- 那么考虑一种情况: 如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,没有必要再写重复逻辑,如
usePrintable(s -> System.out.println(s));中System.out.println(s)就是重复逻辑 - 可以通过方法引用来使用已经存在的方案
2.1 方法引用符
-
方法引用符
::该符号为引用运算符,而它所在的表达式被称为方法引用
-
对比分析
- Lambda表达式:
usePrintable(s -> System.out.println(s));
分析:拿到参数s之后通过Lambda表达式,传递给System.out.println()方法去处理 - 方法引用:
usePrintable(System.out:println);//隐含了把s参数给println方法
分析:直接使用System.out中的println方法来取代Lambda,代码更加的简洁
- Lambda表达式:
-
推导与省略
- 如果使用Lambda,那么根据"可推导就是可省略”的原则,无需指定参数类型,也无需指定的重载形式,它们都将被自动推导
- 如果使用方法引用,也是同样可以根据上下文进行推导
- 方法引用是Lambda的李生兄弟(可以使用Lambda表达式就可以使用方法引用)
-
范例
package test;public class Demo {public static void main(String[] args) {//Lambda表达式usePrintable(i -> {System.out.println(i); //888});//方法引用usePrintable(System.out::println); //888}private static void usePrintable(Printable p) {p.printInt(888);}
}
2.2 引用类方法
-
常用方法引用
- 引用类方法
- 引用类的实例方法(成员方法)
- 引用对象的实例方法
- 引用构造器
-
引用类方法,其实就是引用类的静态方法
-
格式:
类名::静态方法 -
范例:
Integer::parselnt
Integer类的方法:public static int parseInt(String s)将此String转换为int类型数据 -
练习

-
接口类
package test;public interface Converter {int convert(String s);
}
- 测试类
package test;public class Demo {public static void main(String[] args) {
// useConverter(s -> {
// return Integer.parseInt(s);
// });useConverter(s -> Integer.parseInt(s)); //666//引用类方法useConverter(Integer::parseInt); //666//Lambda表达式被类方法替代时,他的形式参数全部传给静态方法做参数;如s字符串传递给parseInt方法}private static void useConverter(Converter c) {int number = c.convert("666");System.out.println(number);}
}
2.3 引用类的实例方法(成员方法)
-
引用类的实例方法,其实就是引用类中的成员方法
-
格式:
类名::成员方法 -
练习

-
接口
package test;public interface MyString {String mySubString(String s,int x,int y);
}
- 测试类
package test;public class Demo {public static void main(String[] args) {
// useMyString((String s,int x,int y)->{
// return s.substring(x, y); //llo
// });useMyString((s,x,y)-> s.substring(x, y)); // //llo//引用类中的实例方法useMyString(String::substring); //llo//Lambda表达式中的形式参数(s,x,y)//第一个参数作为调用者//后面的参数全部传给实例方法作为参数}public static void useMyString(MyString m) {String s = m.mySubString("HelloWorld", 2, 5);System.out.println(s);}
}
2.4 引用对象的实例方法(成员方法)
-
引用对象的实例方法,其实就引用类中的成员方法
-
格式:
对象名::成员方法 -
范例:
"HelloWorld"::toUpperCase
String类中的方法:public String toUpperCase()将此String所有字符转换为大写 -
练习

-
PrintString类
package test;public class PrintString {//把字符串转换成大写public void printUpper(String s) {String result = s.toUpperCase();System.out.println(result);}
}
- 接口
package test;public interface Printer {void printUpperCase(String s);
}
- 测试类
package test;public class Demo {public static void main(String[] args) {
// usePrinter((String s ) -> {
String result = s.toUpperCase();
System.out.println(result); //HELLO
// System.out.println(s.toUpperCase());
// });usePrinter(s -> System.out.println(s.toUpperCase()));//引用对象的实例方法PrintString ps = new PrintString();usePrinter(ps::printUpper); //HELLO}public static void usePrinter(Printer p) {p.printUpperCase("hello");}
}
2.5 引用构造器
-
引用构造器,就是引用构造方法
-
格式:
类名::new -
范例:
Student::new -
练习

-
测试类
package test;public class Demo {public static void main(String[] args) {
// useStudentBuilder((String name,int age) -> {
Student s =new Student(name,age);
return s;
// return new Student(name,age); //
// });useStudentBuilder((name, age) -> new Student(name, age));useStudentBuilder(Student::new); //小黑,10//Lambda表达式被引用构造器代替时,他的形式参数全部传递给构造器作为参数}public static void useStudentBuilder(StudentBuilder sb) {Student s = sb.build("小黑", 10);System.out.println(s.getName() + "," + s.getAge());}
}
相关文章:
Java方法引用
2 方法引用 在使用Lambda表达式的时候,我们实际上传递进去的代码就是一种解决方案:拿参数做操作那么考虑一种情况: 如果我们在Lambda中所指定的操作方案,已经有地方存在相同方案,没有必要再写重复逻辑,如usePrintable…...
C++教程之迭代器Iterator
前言 之前的两篇文章我们主要了解了vector和string的相关知识,从中我们知道可以通过下标来访问vector的元素或者string的字符,但是除了这种方式还有一种更为通用的方式获取元素,那就是迭代器,这篇文章就会简单介绍迭代器的相关内…...
容联七陌:ChatGPT大模型能力为智能客服带来新方向
科技云报道原创。 近几个月来,大众对ChatGPT预期的持续走高,也影响到了智能客服领域公司的命运。 一方面,ChatGPT的出现为智能客服场景带来了更加“智能”的可能性;但另一方面,有人认为ChatGPT完全可以替代现有的智能…...
【Linux 多线程同步】使用同步和互斥实现生产消费模型
目录 1.同步的接口 2.多线程但是按顺序来执行 3.生产消费模型 4.使用互斥加同步实现生产消费模型 (采用环形队列) 同步:在保证数据安全的前提下,让线程能够按照某种特定的顺序访问临界资源,从而有效避免饥饿问题 …...
【TypeScript】TypeScript的接口和对象类型(interface):
文章目录一、使用接口约束的时候不能多一个属性也不能少一个属二、重名interface 可以合并,继承三、可选属性 使用?操作符四、任意属性 [propName: string]五、只读属性 readonly,是不允许被赋值的只能读取六、添加函数一、使用接口约束的时候不能多一个…...
7、函数与异常
目录一、函数的概念二、匿名函数三、闭包四、defer五、异常机制一、函数的概念 函数的基本形式 //函数定义。a,b是形参 func argf(a int, b int) { a a b } var x, y int 3, 6 argf(x, y) //函数调用。x,y是实参函数参数: func arg2(a, b int) { //参数类型相…...
Julia 语言环境安装
Julia 语言支持以下系统: LinuxFreeBSDmacOSWindowsAndroid Julia 安装包下载地址为:Download Julia。 Github 源码地址:GitHub - JuliaLang/julia: The Julia Programming Language。 国内镜像地址:Index of /julia-releases/…...
5.1 线程
文章目录1.概述2.多线程的特性2.1 随机性2.2 CPU分时调度2.3 线程的状态2.4 线程状态与代码对照3.多线程代码实现方式1:继承Thread3.1 概述3.2 常用方法3.3 测试多线程的创建方式14.多线程代码实现方式2:实现Runnable接口4.1 概述4.2 常用方法4.3 练习2:测试多线程的…...
通讯录的实现
一、目的:使用C实现通讯录二、包含功能:添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人显示联系人:显示通讯录中所有联系人信息删除联系人:按照姓名进行删除指定联系人…...
Urho3D导航
Urho3D通过使用Recast和Detour库实现导航网格生成和路径查找。 导航功能通过NavigationMesh和Navigable组件公开。 NavigationMesh从已使用Navigable组件标记的子节点收集几何体。默认情况下,可导航组件的行为是递归的:除非禁用递归,否则也…...
【学习总结】激光雷达与相机外参标定:代码(cam_lidar_calibration)
前段时间尝试了一款激光雷达和相机标定的代码,总结了博客: 【学习总结】激光雷达与相机外参标定:原理与代码 但总觉得那个代码太差劲,而且精度不行,于是又找了些新的代码,体验比之前的好很多,在…...
车载技术开发—{Android CarFrameWork}
Android Automotive平台 Android Automotive是通过Android的通用框架,语言和API来实现的一个全栈,开源,高度可定制的平台。 Android Automotive与整个Android生态系统的关系 Android Automotive是Android的一部分。 Android Automotive不是…...
多城市二手车买卖发布管理小程序开发
多城市二手车买卖发布管理小程序开发 功能特性: 为你介绍二手车微信小程序的功能特性。 车辆分类搜索,支持按品牌、售价、年龄、上牌时间、排量等筛选。 车源发布,支持用户一键发布二手车,平台审核上线,发布可编辑、删除等操作。…...
企业级信息系统开发学习笔记1.2 初探Spring——利用组件注解符精简Spring配置文件
文章目录零、本讲学习目标一、课程引入二、打开项目 - SpringDemo三、利用组件注解符精简Spring配置文件(一)创建新包(二)复制四个类(三)修改杀龙任务类(四)修改救美任务类ÿ…...
37、基于51单片机乒乓球比赛系统设计
摘要 乒乓球游戏电路是一个对输入信号、输入时机正确与否的8个LED表示乒乓球球台和乒乓球,用数码管模拟显示器,显示比赛局数比分和每局玩家得分的电路。电路并不复杂,整体分为两个模块:一,游戏主模块;二&a…...
VMware虚拟机安装Win11最详细过程以及遇到的这台电脑无法运行Windows11的问题
准备工作 在使用VMware虚拟机安装Win11之前我们先把准备工作做好,以免后续思绪混乱导致出错。 1. 到VMware官网或点击链接下载正版VMware Workstation 16 Pro。 2. 双击打开安装包,点击下一步。 3. 阅读用户许可协议,勾选我接受许可协议中的…...
centos误删python2后怎么重新安装
此教程为离线安装 一. 先查询系统版本 cat /proc/version Linux version 3.10.0-1127.el7.x86_64 (mockbuildkbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Tue Mar 31 23:36:51 UTC 2020 二. 安装python2.7.5(已知原python版…...
Qt 开发使用VSCode 笔记2
在之前有写过使用VSCode开发QT的笔记 Qt 开发使用VSCode 在以前的基础上继续学习记录写下《Qt 开发使用VSCode 笔记2》 该笔记相比之前的Qt 开发使用VSCode新加了如下内容: 工作区的使用使用Natvis进行Qt感知对象可视化通过vscode创建QT Quick项目 工作区的使用 …...
查找算法复习
先序在了解查找算法之前,需要熟悉几个概念,不然后面容易产生理解错误。查找表:即被查找的对象,通常由几个关键字组成。关键字:就是数据项、字段的意思。关键字有主次之分,其中主关键字取值是唯一的。查找长…...
腾讯前端必会面试题(必备)
如何提取高度嵌套的对象里的指定属性? 有时会遇到一些嵌套程度非常深的对象: const school {classes: {stu: {name: Bob,age: 24,}} }像此处的 name 这个变量,嵌套了四层,此时如果仍然尝试老方法来提取它: const {…...
政务行业高准确率、可控、符合规范的数据库审计与监测实践方案
一、概要:以高精准风险监测与全链路审计,构筑政务数据安全可控防线在国家数字化治理体系纵深推进的背景下,政务数据已成为驱动政府决策、公共服务与社会管理的关键生产要素。然而,随着政务云、数据共享交换平台的大规模建设&#…...
欧洲发布Euro-Office引发OnlyOffice强烈抗议
欧洲企业Ionos和Nextcloud联合推出了Euro-Office,这是基于OnlyOffice云办公套件的分支版本,专为对数字主权有顾虑的组织而设计,此举引发了原开发商的愤怒回应。几天前,以德国自托管云服务商Nextcloud为首的"欧洲企业和社区组…...
4.2 学习笔记
Mysql 数据库专题1.本专题的学习重点1、熟悉Mysql数据库的连接工具2、掌握查询的SQL语句的编写2.什么是数据库数据库就是存储数据的仓库3.为什么要学数据库Mysql在测试过程中,有时候需要通过访问数据库验证数据的正确性比如:验证统计报表....4.企业主流的…...
制造业上线Agent,能获得哪些核心价值?——2026工业AI从“辅助决策”迈向“全自主执行”的深度解析
站在2026年这个时间节点回望,制造业的数字化转型已完成了从“数据上云”到“智能入链”的惊人跨越。如果说过去十年的工业互联网核心是解决“连接”问题,那么2026年全面爆发的AI Agent(智能体)则彻底解决了“执行”问题。在当前的…...
RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践
RexUniNLU部署教程:Kubernetes集群中水平扩缩容RexUniNLU服务的Helm Chart实践 1. 为什么需要在K8s中部署RexUniNLU? 你可能已经试过在本地跑通 python test.py,也成功启动了 server.py 提供的 FastAPI 接口。但当真实业务流量进来——比如…...
mysql备份工具选择_mysqldump对InnoDB与MyISAM支持
mysqldump默认对MyISAM用表级锁、InnoDB不启用事务快照,混合引擎必须用--lock-all-tables保证一致性,且需确保REPEATABLE READ隔离级别和ROW/MIXED binlog格式。mysqldump 默认行为对 InnoDB 和 MyISAM 完全不同默认不加任何参数时,mysqldump…...
终极跨平台Iwara视频社区客户端:5个核心功能完全指南
终极跨平台Iwara视频社区客户端:5个核心功能完全指南 【免费下载链接】iwrqk Unofficial Iwara Flutter Client 项目地址: https://gitcode.com/gh_mirrors/iw/iwrqk IwrQk是一款基于Flutter框架开发的跨平台Iwara视频社区客户端应用,为你提供在i…...
Harness Engineering(驾驭工程)
AI 模型已经能写出 100 万行代码。真正的挑战不再是"让它写得更好",而是怎么驾驭它稳定、可靠、不失控地工作。这套围绕 AI 智能体构建约束、反馈与控制系统的方法论,就是 2026 年初迅速席卷工程圈的新范式——Harness Engineering(…...
2026网盘风云再起:告别“传不动”,这两款不限速良心网盘实测解析
近些年,网盘市场经历了一轮又一轮的洗牌。从早年各大云盘陆续关停,到后来现有网盘部分服务全面转向收费模式,甚至对非会员进行严苛的网速阉割。用户常常面临「存不下、传不动、下不来」的窘境。 如今已是2026年,网盘市场看似被少…...
利用快马平台快速构建类FinalShell服务器监控Web原型
最近在折腾服务器监控工具,发现FinalShell确实好用,但有时候团队协作或者临时演示时,还是需要一个轻量级的Web版监控面板。正好发现了InsCode(快马)平台,用它快速搭建了一个原型,分享下实现思路。 整体架构设计 这个监…...
