【Java 8】Lambda: mAA::get 返回函数式接口实例

 

正文 

 代码介绍:分别有两个函数式接口Lazy跟LazyDependencyCreator,一个HashMap存储<Object, LazyDependencyCreator>键值对。重点在于mProviders.put(AA.class,mAA::get),看了很久都没看懂,mAA::get返回的不是mAA本身吗,为什么能转化为LazyDependencyCreator存储在map里。

public interface Lazy<T> {T get();
}public class AA{}import java.util.HashMap;public class NewLambda {static Lazy<AA> mAA;private interface LazyDependencyCreator<T> {T createDependency();}private static final HashMap<Object, LazyDependencyCreator> mProviders = new HashMap<>();public static void main(String[] args) {mProviders.put(AA.class,mAA::get);//mProviders.put(AA.class, () -> mAA.get());}}

 双冒号在这里的用法是方法引用,因为在 Java 中,方法引用可以被视为函数接口的实现,所以说mAA::get它本来就说一个函数式接口实例

HashMap<Object, LazyDependencyCreator>这里的LazyDependencyCreator可以修改为任何函数式接口。

import java.util.HashMap;public class NewLambda {static Lazy<AA> mAA;private interface LazyDependencyCreator {void createDependency();//返回的是啥都行,跟返回值没关系}private static final HashMap<Object, LazyDependencyCreator> mProviders = new HashMap<>();public static void main(String[] args) {mProviders.put(AA.class, mAA::get);}}

 另外,还是感觉LazyDependencyCreator接口很多余。

 这一段是我第一篇发布的错误想法,我怕是个傻子

涨知识了,在函数式接口的情景里,原来使用双冒号是能省略方法调用的,具体原理不知道,反正就是能这样用。

测试代码如下:

代码介绍:分别有两个函数式接口Lazy跟LazyDependencyCreator,一个HashMap存储<Object, LazyDependencyCreator>键值对。重点在于mProviders.put(AA.class,mAA::get),看了很久都没看懂,mAA::get返回的不是mAA本身吗,为什么能转化为LazyDependencyCreator存储在map里。

public interface Lazy<T> {T get();
}public class AA{}import java.util.HashMap;public class NewLambda {static Lazy<AA> mAA;private interface LazyDependencyCreator<T> {T createDependency();}private static final HashMap<Object, LazyDependencyCreator> mProviders = new HashMap<>();public static void main(String[] args) {mProviders.put(AA.class,mAA::get);//mProviders.put(AA.class, () -> mAA.get());}}

双冒号有方法调用的作用我是知道的,在函数式接口里它能省略方法调用是第一次知道,记录一下,另外,感觉LazyDependencyCreator接口很多余,下面这样不也可以吗。

public class NewLambda {static Lazy<AA> mAA;private interface LazyDependencyCreator<T> {T createDependency();}private static final HashMap<Object, Object> mProviders = new HashMap<>();public static void main(String[] args) {mProviders.put(AA.class, mAA.get());}}

 不理解。

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

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

相关文章

部署私有YUM源

需将对应版本DVD下载至本机&#xff0c;并保证本机可访问互联网&#xff0c;下载需要的rpm包。 下载DVD并进行挂载 mkdir /data/iso -pmkdir /data/yum -pcd /datawget http://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-Everything-1511.isomount -o loop -t…

知识付费app源码快速发布app定制开发一站式定制开发平台,开办技术学校的风险有哪些?如何防范?

现在越来越多的人看好培训行业&#xff0c;投资者们或选择加盟&#xff0c;或选择创业&#xff0c;不管哪一种都是投资&#xff0c;投资就会有风险&#xff0c;那么技术学校在办学过程中&#xff0c;有哪些风险呢? 1、学生人身伤害事故的风险 技术学校的学生&#xff0c;不是同…

java接口介绍

在Java中,接口(interface)是一种特殊的引用类型,它是一种抽象的规范,用于定义一组方法的集合,但不提供方法的具体实现。接口定义了一种契约,规定了类应该具有的方法,但不规定方法的具体实现。一个类可以实现一个或多个接口,从而获得接口中定义的所有方法。 接口在Jav…

npm i 与npm install的区别,接上回的npm ERR! code 128

在admin-element-ui拉取框架代码后&#xff0c;需要先安装依赖&#xff0c;但是会报128的错误&#xff0c;我这里总结一下&#xff0c;接上回一篇博客npm ERR! code 128-CSDN博客后续。 以前一直以为 npm i 与 npm install 是同一个东西&#xff0c;但是就在今天早上安装依赖的…

在input光标处插入内容,并解决TS报错

在input或者textarea的光标处插入内容&#xff0c;如果是键盘输入倒是好说&#xff0c;直接把光标定位过去&#xff0c;键盘打字就可以了&#xff1b;如果在光标处插入内容呢&#xff0c;稍微费点事&#xff0c;倒是不是问题&#xff1b;但ts总是希望把一切弄得规范一些&#x…

Codeforces Round 134 (Div. 1) A. Ice Skating (并查集)

Ice Skating 题面翻译 Description 给出n个点的横纵坐标&#xff0c;两个点互通当且仅当两个点有相同的横坐标或纵坐标&#xff0c;问最少需要加几个点才能使得所有点都两两互通 Input 第一行一个整数n表示点数&#xff0c;之后n行每行两个整数x[ i ]和y[ i ]表示第i个点的…

关于Windows驱动中DPC同步的一些见解说明

DPC会被分配到不停的CPU核心上,如果分配到同一个核心,那么DPC是串行的,如果分配到不同的CPU核心上,那么DPC是并行的,但如果设置WDF_OBJECT_ATTRIBUTES的SynchronizationScope属性为WdfSynchronizationScopeDevice,那么即便CPU有多核,DPC也不会在不同的核心上并发,因为系…

零基础HTML教程(32)--HTML5语义化标签

文章目录 1. div时代2. div的缺点3. 语义化标签4. 语义化标签有哪些5. 实战演练6. 小结 1. div时代 我是2009年开始学习网页开发的&#xff0c;那时候HTML里面到处是div。 这么说吧&#xff0c;那时候div就是网页的骨架&#xff0c;支撑着网页的主结构。 2. div的缺点 div作…

使用J-Link Commander / JFlash 烧写固件程序(以STM32F103C8T6为例)

使用JFlash 烧写流程 运行JFlash, 点击Project Settings 配置Jlink为SWD方式,选择连接设备为STM32F103C8T6, 点击确定. 选择要烧录的Bin文件 设置bin文件烧录地址, 点击OK(地址要在0x08000000-0x0800FFFF范围内) Note : STM32F103C8T6 Flash大小为 64KB&#xff0c; 地址范围…

速盾可以防御的攻击类型是否会随着技术的发展而不断变化?

随着技术的发展&#xff0c;网络攻击的形式也在不断演变。因此&#xff0c;速盾作为一种网络安全防护技术&#xff0c;也需要不断更新和改进&#xff0c;以应对新的攻击类型。本文将从技术发展的角度探讨速盾如何应对不断变化的攻击类型。 首先&#xff0c;随着技术的进步&…

Vuex,在 Vue 组件中监听 Vuex 状态变化,使用watch监听Vuex中的数据

简介&#xff1a;在Vue应用程序中使用Vuex进行状态管理时&#xff0c;经常需要在组件中响应状态的变化。这里来记录一下 一. 在使用 Vuex 进行状态管理时&#xff0c;我们经常需要在组件中响应状态的变化。Vue 提供了两种方式来实现这一点&#xff1a;computed 属性和 watch 选…

重生奇迹mu再生宝石怎么用有什么用

重生奇迹mu再生宝石有2个用处&#xff1a; 1、在玛雅哥布林处给380装备加PVP属性4追4以上的380级装备,守护宝石一颗,再生宝石一颗,成功得到PVP装备,失败宝石消失,装备无变化&#xff1b; 2、给非套装点强化属性用法跟祝福,灵魂,生命一样直接往装备上敲,成功得到随机强化属性一…

八. Django项目之电商购物商城 -- 添加邮箱

Django项目之电商购物商城 – 添加邮箱 一. 用户中心 添加邮箱功能在用户中心中 , 先完善用户中心功能 1. 视图 # 用户中心 class UserInfoCenterView(LoginRequiredMixin,View):def get(self , request):context {username : request.user.username,mobile : request.use…

队列的实现以及队列如何实现栈

一、队列的定义 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出 FIFO(First In First Out) 入队列&#xff1a;进行插入操作的一端称为 队尾 出队列&#xff1a;进行删除操作的一端称为 队头 …

20240507 ubuntu20.04+ros noetic 跑通lioslam

任务&#xff1a;跑通lioslam 主要参考博客 IMU激光雷达融合使用LIO-SAM建图学习笔记——详细、长文、多图、全流程_ubuntu_AIDE回归线-GitCode 开源社区 (csdn.net) 1.不要用这一句 wget -O ~/Downloads/gtsam.zip https://github.com/borglab/gtsam/archive/4.0.0-alpha2…

【Spring】初识 Spring AOP(面向切面编程)

目录 1、介绍AOP 1.1、AOP的定义 1.2、AOP的作用 1.3、AOP的核心概念及术语 2、AOP实现示例 3、EnableAspectJAutoProxy注解 1、介绍AOP 1.1、AOP的定义 AOP&#xff08;Aspect Orient Programming&#xff09;&#xff0c;直译过来就是面向切面编程&#xff0c;AOP 是一…

Windows Python 安装准备

首先安装配置 1. 环境的安装和配置: 运行环境: 官方提供了cpython解释器 编辑环境: 课程初级阶段:推荐大家使用: 记事本工具(UE、notepad++、editplus、sublime、vscode) 中期阶段IDE的使用,pycharm 2. 安装python环境: 在官方下载python解释器 www.python.org …

Ubuntu18.04--虚拟机配置Samba并从Windows登录

前言&#xff1a; 本文记录我自己在Windows上安装 Virtualbox &#xff0c;并在Virtualbox中安装 Ubuntu-18.04 虚拟机&#xff0c;在Ubuntu-18.04虚拟机里安装配置Smaba服务器&#xff0c;从 Windows 宿主系统上访问虚拟机共享samba目录的配置命令。 引用: N/A 正文 虚拟…

[C++][数据结构]哈希3:unordered_map和unordered_set的模拟实现

前言 今天我们来试着用哈希封装一下unordered_map和unordered_set这两个容器 由于主要的哈希的模拟实现都在之前的文章中&#xff0c;所以本文只是对于几个小问题进行说明 KeyOfT&#xff1a;取出key 因为我们传的第二个模板参数是T&#xff0c;我们不知道他是key还是pair&l…

Three.js的材质Material信息

Material材质信息,是独立于物体顶点之外,与渲染效果相关的属性。比如通过设置材质可以改变物体的颜色、纹理贴图、光照模式等等。 基本材质【BasicMaterial】 基本材质BasicMaterial的物体,颜色不会因为光照产生明暗、阴影效果。如果没有指定的材质颜色,那么颜色就是随机…