java —— 匿名內部類與 Lambda 表達式

一、匿名內部類

匿名內部類是一種沒有名稱的類,多用于只使用一次的情況,本質上就是其所繼承的父類或接口的一個子類。

(一)繼承普通類的情況

public class Test{public void method(){System.out.println("通用方法");}public static void main(String[] args){Test ts1=new Test();ts1.method();           //調用普通方法
//創建內部類,等價于Test的一個子類,同時將其實例化為ts2Test ts2=new Test(){public void method(){System.out.println("內部類方法");}};ts2.method();          //調用內部類方法}
}

(二)繼承抽象類的情況

public abstract class Test{public abstract void method(String a);
}
public class TT{public static void main(String[] args){Test ts=new Test(){public void method(String a){System.out.println(a);}};ts.method();}
}

?本案例中,ts 本質上就是抽象類 Test 的一個子類的實例化對象,在匿名內部類中對抽象類 Test 中的 method 方法進行重寫,然后調用。

(三)繼承接口的情況

public interface Test{public void method(int a,int b);
}
public class TT{public static void main(String[] args){Test ts=new Test(){public void method(int a,int b){System.out.println(a+b);}};ts.method();}
}

?繼承接口的情況與繼承抽象類的情況類似,ts 仍然相當于接口 Test 的一個子類的實例化對象,重寫方法后,用這個子類的實例化對象 ts 去調用這個子類的方法 method。

二、Lambda表達式

在很多情況下,匿名內部類的書寫過于繁瑣,此時可以用 Lambda 表達式代替,其語法格式為:()->{}。對應上述三種情況,代碼更改如下:

(一)繼承普通類的情況

public class Test{public void method(){System.out.println("通用方法");}public static void main(String[] args){Test ts1=new Test();ts1.method();           //調用普通方法
//創建內部類,等價于Test的一個子類,同時將其實例化為ts2Test ts2=()->{System.out.println("內部類方法");};ts2.method();          //調用內部類方法}
}

(二)繼承抽象類的情況

public abstract class Test{public abstract void method(String a);
}
public class TT{public static void main(String[] args){Test ts=(String a)->{System.out.println(a);};ts.method();}
}

(三)繼承接口的情況

public interface Test{public void method(int a,int b);
}
public class TT{public static void main(String[] args){Test ts=(int a,int b)->{System.out.println(a+b);};ts.method();}
}

三、精簡 Lambda 表達式

① 參數類型可以省略

② 如果只有一個參數,() 可以省略

③ 如果方法體只有一條語句,{} 可以省略

④ 如果方法體中唯一的一條語句是 return 語句,省略 {} 的同時,return 關鍵字也要省略

對應上述三種情況,代碼可進一步優化為:

Test ts2=()->System.out.println("內部類方法");
 Test ts=a->System.out.println(a);
Test ts=(a,b)->System.out.println(a+b);

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/20928.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/20928.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/20928.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python與Android連接:深入探索與實現

Python與Android連接:深入探索與實現 在現代移動應用開發領域,Python和Android的結合使用為開發者帶來了無限的可能性。這種跨平臺的組合不僅拓寬了開發者的視野,也極大地提升了應用的靈活性和可擴展性。本文將從四個方面、五個方面、六個方…

【NLP開發】Python實現聊天機器人(微信機器人)

🍺NLP開發系列相關文章編寫如下🍺:1🎈【小沐學NLP】Python實現詞云圖🎈2🎈【小沐學NLP】Python實現圖片文字識別🎈3🎈【小沐學NLP】Python實現中文、英文分詞🎈4&#x1…

轉讓北京電力施工總承包二級資質變更條件和流程

在電力工程領域,資質等級是企業能否參與競標、承接工程的重要標志之一。北京電力工程總包二級資質的轉讓,是指已經取得該資質的企業將其資質轉讓給需要的企業。這種轉讓是基于合作與共贏的原則,旨在推動電力工程行業健康、穩定發展&#xff0…

記錄使用自定義編輯器做試題識別功能

習慣了將解析寫在代碼注釋,這里就直接上代碼啦,里面用到的bxm-ui3組件庫是博主基于element-Plus做的,可以通過npm i bxm-ui3自行安裝使用 // 識別方法: // dom 當前識別數據所在區域, questionType 當前點擊編輯選擇的題目類型&a…

力扣刷題--LCR 135. 報數【簡單】

題目描述 實現一個十進制數字報數程序,請按照數字從小到大的順序返回一個整數數列,該數列從數字 1 開始,到最大的正整數 cnt 位數字結束。 示例 1: 輸入:cnt 2 輸出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,1…

codeblock怎么編程:從入門到精通的全面指南

codeblock怎么編程:從入門到精通的全面指南 在數字化時代,編程已成為一項不可或缺的技能。Code::Blocks作為一款流行的開源集成開發環境(IDE),為初學者和有經驗的開發者提供了強大的編程支持。那么,codebl…

C是結構化編程語言嗎:深度剖析與多維度解讀

C是結構化編程語言嗎:深度剖析與多維度解讀 在編程語言的浩瀚海洋中,C語言以其獨特的魅力占據著重要的地位。那么,C語言是否可以被歸類為結構化編程語言呢?這是一個值得深入探討的問題。本文將從四個方面、五個方面、六個方面和七…

Qt | Qt 資源簡介(rcc、qmake)

1、資源系統是一種獨立于平臺的機制,用于在應用程序的可執行文件中存儲二進制文件(前面所討論的數據都存儲在外部設備中)。若應用程序始終需要一組特定的文件(比如圖標),則非常有用。 2、資源系統基于 qmake,rcc(Qt 的資源編譯器,用于把資源轉換為 C++代碼)和 QFile …

java—MyBatis框架

簡介 什么是 MyBatis? MyBatis 是一款優秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設置參數和獲取結果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO&…

軟件公司為什么必須要使用低代碼系統?

在當今軟件行業全國比較內卷的大環境下,軟件公司面臨著前所未有的挑戰。為了在這個競爭激烈的市場中生存并脫穎而出,馳騁低代碼設計者認為,軟件公司必須要使用低代碼系統。以下是幾個關鍵的原因: 時代發展的必然選擇 低代碼系統是…

領導力中的說服藝術

本文主要介紹了亞里士多德修辭三角理論,即演講者在說服聽眾時如何運用品格(Ethos)、情感(Pathos)和邏輯(Logos)三種基本的修辭手法。原文: The Art of Persuasion in Leadership 亞里士多德的說…

Kubernetes面試題分享

目錄 前言 1.Kubernetes的控制平面包括哪些核心組件?它們各自的作用是什么? 2.Kubernetes的數據平面涉及哪些組件?它們如何協作? 3.什么是Pod?為什么它是Kubernetes的基本單元? 4.Service如何實現服務…

【自動駕駛技術】自動駕駛汽車AI芯片匯總——地平線篇

0. 前言 按照國際慣例,首先聲明:本文只是我自己學習的理解,雖然參考了他人的寶貴見解及成果,但是內容可能存在不準確的地方。如果發現文中錯誤,希望批評指正,共同進步。 本篇文章是這個系列的第二篇&#x…

[AIGC] DAG任務調度的概述與實踐

DAG(Directed Acyclic Graph,有向無環圖)作為任務調度的基礎模型,在大規模數據處理和計算過程中有著廣泛的應用。本文將對DAG模型的原理進行解釋并列出一些常用的任務調度工具。 文章目錄 一、什么是DAG?二、DAG任務調度的原理三、常用的DAG任…

50個常用的Docker命令及如何使用

這里整理了50個常用的Docker命令以及每個命令的使用方法。 docker version:顯示Docker版本信息。 示例:docker version docker info:顯示Docker系統信息。 示例:docker info docker pull <image>:從Docker Hub下載鏡像。 示例:docker pull ubuntu docker run <i…

spring xml配置文件中的bean標簽屬性

概述 在Spring框架中&#xff0c; 標簽用于定義和配置 Spring 容器管理的對象&#xff08;即 bean&#xff09;。 標簽有許多屬性&#xff0c;每個屬性都用來配置 bean 的特定方面。下面是一些主要屬性及其默認值的詳細說明。 屬性 1 id 說明: 用于標識 bean 的唯一標識符。…

一文帶你了解python

一文帶你了解python 簡單介紹 python是腳本語言,不需要在使用變量前進行聲明,代碼不需要編譯,由解釋器來解釋執行。python簡潔的語法可以讓你寫出比靜態語言更短的程序。使用交互式解釋器時,會自動打印輸入的一些包含值的東西;在非交互式的程序中,需要使用print函數打印…

Python獲取文件MD5值方法

Python的標準庫中提供了一個名為hashlib的模塊&#xff0c;可以用來生成MD5值。 下面是兩個方法的實現&#xff1a; 1. 通過文件路徑獲取MD5值&#xff1a; import hashlibdef calculate_md5_file(file_path):md5 hashlib.md5()with open(file_path, "rb") as f:…

啟發式算法教程(個人總結版)

1. 引言 1.1 什么是啟發式算法 啟發式算法是一類用于尋找復雜優化問題近似解的方法&#xff0c;特別適用于在計算資源有限的情況下求解大型問題。與精確算法不同&#xff0c;啟發式算法不保證找到全局最優解&#xff0c;但能在可接受的時間內提供一個質量較高的解。 1.2 啟發…

CMake編譯安裝、生成可執行程序、生成靜態動態庫以及靜態動態庫的鏈接

1 CMake介紹 CMake是一個開源的、跨平臺的構建系統&#xff0c;用于管理軟件從源代碼到可執行文件的整個構建過程。它最初由Kitware公司為ITK&#xff08;Insight Segmentation and Registration Toolkit&#xff09;和VTK&#xff08;Visualization Toolkit&#xff09;等開源…