java_方法引用和构造器引用

文章目录

  • 一、方法引用
    • 1.1、方法引用的理解
    • 1.2、格式
    • 1.3、举例
  • 二、构造器引用
    • 2.1、格式
    • 2.2、例子
    • 2.3、数组引用

一、方法引用

1.1、方法引用的理解

  • 方法引用,可以看做是基于lambda表达式的进一步刻画
  • 当需要提供一个函数式接口的实例时,可以使用lambda表达式提供此实例
  • 当满足一定条件时,还可以使用方法引用或构造器引用替换lambda表达式

1.2、格式

总体理解:类(对象)::方法名

  • 对象 :: 实例方法名
  • 类 :: 静态方法名
  • 类 :: 实例方法名

1.3、举例

前提:Lambda体只有一句语句,并且是通过调用一个对象/类现有的方法来完成的

  • 对象 :: 实例方法名
	@Testpublic void test1() {// 1.匿名实现类Consumer<String> con1 = new Consumer<String>(){@overridepublic void accept(String s){System.out.pringln(s);}}// 2.lambda表达式Consumer<String> con1 = s -> System.out.println(s);// 3.方法引用Consumer<String> con2 = System.out::println;}

1、accept()方法的形参、返回值和println()方法的一样,所以可用方法引用代替lambda表达式
2、函数式接口中的抽象方法a在被重写时使用了某一个对象的实例方法b。如果方法a的形参列表、返回值类型与实例方法b的形参列表、返回值类型都相同(满足多态场景也可以),则我们可以使用方法b实现对方法a的重写、替换。

  • 类 :: 静态方法名
	@Testpublic void test3() {// 1.匿名实现类Comparator<Integer> com1 = new Comparator<Integer>(){@overridepublic int compare(Integer o1,Integer o2){return Integer.compare(o1,o2);}}// 2.lambda表达式Comparator<Integer> com1 = (t1,t2) -> Integer.compare(t1,t2);// 3.方法引用Comparator<Integer> com2 = Integer::compare;}

函数式接口中的抽象方法a在被重写时使用了某一个类的静态方法b。如果方法a的形参列表、返回值类型与方法b的形参列表、返回值类型都相同(满足多态场景也可以),则可以使用方法b实现对方法a的重写、替换。

  • 类 :: 实例方法名
	@Testpublic void test5() {// 1.匿名实现类Comparator<String> com1 = new Comparator<String>(){@overridepublic int compare(String o1,String o2){retrun o1.compareTo(o2);}}// 2.lambda表达式Comparator<String> com1 = (s1,s2) -> s1.compareTo(s2);// 3. 方法引用Comparator<String> com2 = String :: compareTo;}

函数式接口中的抽象方法a在被重写时使用了某一个对象的方法b。如果方法a的返回值类型与方法b的返回值类型相同(满足多态场景也可以),同时方法a的形参列表中有n个参数,方法b的形参列表有n-1个参数,且方法a的第1个参数作为方法b的调用者,且方法a的后n-1参数与方法b的n-1参数匹配(类型相同或满足多态场景也可以)

二、构造器引用

2.1、格式

类名::new
  • 调用类名对应的类中的某一个确定的构造器
  • 具体调用的是哪一个构造器?取决于函数式接口的抽象方法的形参列表

2.2、例子

	@Testpublic void test1(){// 1.匿名实现类Supplier<Employee> sup = new Supplier<Employee>() {@Overridepublic Employee get() {return new Employee();}};// 2.lambda表达式Supplier<Employee>  sup1 = () -> new Employee();// 3.构造器引用, 调用的是Employee类中的空参构造器Supplier<Employee>  sup2 = Employee :: new;}
	@Testpublic void test2(){// 1.lambda表达式Function<Integer,Employee> func1 = id -> new Employee(id);// 2.构造器引用,调用的是Employee类中的Employee(int id)这个构造器Function<Integer,Employee> func2 = Employee :: new;}

2.3、数组引用

  • 格式:数组类型名::new
  • 例子
@Test
public void test(){// 1.匿名实现类Function<Integer,String[]> func1 = new Function<Integer,String[]>{@overridepublic String[] apply(Integer length){return new String[length];}}// 2.lambda表达式Function<Integer,String[]> func1 = length -> new String[length];String[] arr1 = func1.apply(5);// 3.数组引用Function<Integer,String[]> func2 = String[] :: new;String[] arr2 = func2.apply(10);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/106052.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

牛客周赛 Round 15_B

题目描述 对于一个小写字母而言&#xff0c;游游可以通过一次操作把这个字母变成相邻的字母。a和b邻&#xff0c;b和c相邻&#xff0c;以此类推。特殊的&#xff0c;a和z也是相邻的。可以认为&#xff0c;小写字母的相邻规则为一个环。 游游拿到了一个仅包含小写字母的字符串…

了解油封对汽车安全的影响?

油封也称为轴封或径向轴封&#xff0c;是车辆发动机、变速箱和其他各种机械系统中的重要部件。它们的主要功能是阻止重要发动机部件的液体(例如油或冷却剂)泄漏&#xff0c;同时防止污染物进入。这些看似简单的任务&#xff0c;但对汽车的安全性和可靠性有着深远的影响。 油封…

docker安装nessus

注册地址:https://zh-tw.tenable.com/products/nessus/nessus-essentials 临时邮箱:http://24mail.chacuo.net/ 帮助文档:https://docs.tenable.com/nessus/Content/DeployNessusDocker.htmdocker pull tenableofficial/nessusdocker run --name "my-nessus" -d -p 8…

vscode用密钥文件连接ssh:如果一直要输密码怎么办

commandshiftP&#xff1a;打开ssh配置文件 加上这么一段&#xff0c;host就是你给主机起的名字 对IdentityFile进行更改&#xff0c;改成相应的密钥文件 然后commandshiftP链接到主机就可以了 但是有时候它会让输入密码 这是由于你给这个IdentityFile的权限太多了&#xf…

npm 常用指令总结

1. 初始化包 一个存放了代码的文件夹,如果里面有 package.json 文件,则可以把这个文件夹称之为包。 npm init -y 注意: 由于包名不能有中文,不能有大写,不能和未来要下载的包重名. 所以我们快速初始化包时,我们的文件夹也不能违反前面说的规则.(因为默认会将文件夹的名称,作…

数据结构 - 2(顺序表10000字详解)

一&#xff1a;List 1.1 什么是List 在集合框架中&#xff0c;List是一个接口&#xff0c;继承自Collection。 Collection也是一个接口&#xff0c;该接口中规范了后序容器中常用的一些方法&#xff0c;具体如下所示&#xff1a; Iterable也是一个接口&#xff0c;Iterabl…

【Vue面试题二十三】、你了解vue的diff算法吗?说说看

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;你了解vue的diff算法吗&…

Vue-3.1缓存组件keep-alive

问题&#xff1a;从首页卡片点到详情页&#xff0c;又点返回&#xff0c;数据重新加载了->希望回到原来的位置 原因&#xff1a;路由跳转后&#xff0c;组件被销毁了&#xff0c;返回回来组件又被重建了&#xff0c;所以数据重新被加载了 解决&#xff1a;利用keep-alive将…

【Vue面试题二十一】、Vue中的过滤器了解吗?过滤器的应用场景有哪些?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;Vue中的过滤器了解吗&am…

Java字符串String

【char】类型代表字符类型&#xff0c;【String】类型代表字符串类型&#xff1b; 1.String类 1.1 声明字符串 在Java中字符串必须包含在一对双引号&#xff08;“ "&#xff09;之内。双引号包含的都是字符串。 声明字符串语法&#xff1a; String str; //声明字符串语…

卡尔曼家族从零解剖-(02)贝叶斯滤波-知其所以然

讲解关于slam一系列文章汇总链接:史上最全slam从零开始&#xff0c;针对于本栏目讲解的 卡尔曼家族从零解剖 链接 :卡尔曼家族从零解剖-(00)目录最新无死角讲解&#xff1a;https://blog.csdn.net/weixin_43013761/article/details/133846882 文末正下方中心提供了本人 联系…

排序算法-选择排序法(SelectionSort)

排序算法-选择排序法&#xff08;SelectionSort&#xff09; 1、说明 选择排序法也是枚举法的应用&#xff0c;就是反复从未排序的数列中取出最小的元素&#xff0c;加入另一个数列中&#xff0c;最后的结果即为已排序的数列。选择排序法可使用两种方式排序&#xff0c;即在所…

【Java集合中各种数据结构的方法汇总】

文章目录 Java集合中各种数据结构的方法汇总数组 ArrayList 、LinkedList链表 LinkedList栈 Stack队列 ArrayQueue、LinkedList哈希表 HashMap堆 PriorityQueue Java集合中各种数据结构的方法汇总 获取大小&#xff1a;fun.size(); 判断是否为空&#xff1a;fun.isEmpty(); …

苍穹外卖(七) Spring Task 完成订单状态定时处理

Spring Task 完成订单状态定时处理, 如处理支付超时订单 Spring Task介绍 Spring Task 是Spring框架提供的任务调度工具&#xff0c;可以按照约定的时间自动执行某个代码逻辑。 应用场景: 信用卡每月还款提醒 火车票售票系统处理未支付订单 入职纪念日为用户发送通知 点外…

操作系统学习笔记4-死锁问题

文章目录 1、死锁逻辑图2、死锁三胞胎3、死锁的原因及必要条件4、死锁处理策略之死锁预防5、死锁处理策略之死锁避免&#xff08;银行家算法&#xff09;6、死锁处理策略之死锁检测与解除 1、死锁逻辑图 2、死锁三胞胎 3、死锁的原因及必要条件 4、死锁处理策略之死锁预防 5、死…

python openai宠物名字生成器

文章目录 OpenAICompletion宠物名字生成器提示词工程 prompt enginering 构建应用程序结果展示 OpenAI OpenAI 已经训练了非常擅长理解和生成文本的领先的语言模型。我们的 API 提供对这些模型的访问&#xff0c;可用于处理几乎任何涉及”语言处理“的任务。 Completion 补全…

18 | 生产环境多数据源的处理方法有哪些

工作中我们时常会遇到跨数据库操作的情况&#xff0c;这时候就需要配置多数据源&#xff0c;那么如何配置呢&#xff1f;常用的方式及其背后的原理支撑是什么呢&#xff1f;我们下面来了解一下。 首先看看两种常见的配置方式&#xff0c;分别为通过多个 Configuration 文件、利…

【完美世界】云曦篇开播时间定档,推迟两周,石昊新形态帅翻,怒斩战王

Hello,小伙伴们&#xff0c;我是小郑继续为大家深度解析国漫资讯。 完美世界动画更新最新资讯&#xff0c;石昊在血色平原与云曦重逢并英雄救美。 官方公布了云曦特别篇的先导预告&#xff0c;播出时间推迟了两周。 石昊在特别篇中出现了新形态&#xff0c;以雷帝甲胄为主&…

Leetcode—88.合并两个有序数组【简单】

2023每日刷题&#xff08;一&#xff09; Leetcode—88.合并两个有序数组 题解 因为这两个数组已经排好序&#xff0c;我们可以把两个指针分别放在两个数组的末尾&#xff0c;即 nums1 的m − 1 位和 nums2 的 n − 1 位。每次将较大的那个数字复制到 nums1 的后边&#xff0…

Kafka SASL认证授权(六)全方位性能测试

Kafka SASL认证授权(六)全方位性能测试。 官网地址:https://kafka.apache.org/ 一、场景 线上已经有kafka集群,服务运行稳定。但是因为产品升级,需要对kakfa做安全测试,也就是权限验证。 但是增加权限验证,会不会对性能有影响呢?影响大吗?不知道呀! 因此,本文就此…