【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.pswp.cn/web/10260.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/10260.shtml
英文地址,請注明出處:http://en.pswp.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的物體,顏色不會因為光照產生明暗、陰影效果。如果沒有指定的材質顏色,那么顏色就是隨機…