Java 8新特性:方法引用的介绍与使用

news/2024/11/23 16:35:14/

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

欢迎志同道合的朋友一起加油喔🤺🤺🤺


目录

1. 什么是方法引用?

2. 方法引用的类型

3. 如何使用方法引用?

3.1 静态方法引用 (类名::静态方法)

3.2 特定对象的实例方法引用 (对象::方法名)

3.3 特定类型的任意对象的实例方法引用 (类名::普通方法)

3.4 构造函数引用 (类名::new )

4. 结论



Java 8的引入带来了许多新的特性和改进,其中最引人注目的无疑是lambda表达式,然而在这个背后,还有一项新特性,被称为“方法引用”,对于代码的简化和优雅度有着重要的作用。今天,让我们一起深入探索Java 8的方法引用特性。

1. 什么是方法引用?

  • 方法引用是Java 8引入的一种语法糖,它允许我们使用 :: 符号直接引用已存在的方法,不需要显式地提供方法的参数列表。方法引用和Lambda表达式是关联的,都是Java 8引入的函数式编程的重要特性。
  • 方法引用可以理解为一个更简洁、更直接的Lambda表达式。当你需要使用一个已经存在的方法(无论是静态方法、实例方法还是构造函数),而这个方法的签名(参数类型和数量)已经适合你的需要,那么就可以使用方法引用。
  • 对于方法引用,我们常常把它看做是对一个方法的直接引用,就像我们在现实世界中引用一本书或一篇文章一样。当我们引用一个方法时,我们并不执行那个方法。相反,我们是在告诉Java虚拟机我们有一个现成的方法,可以直接拿来使用。
  • 使用方法引用可以使我们的代码更简洁、更易读。同时,方法引用的语法也强调了我们使用的是已经存在的、已经定义好的方法,而不是我们现场创建的。

2. 方法引用的类型

Java 8中的方法引用主要有四种类型:

  • 静态方法引用:ClassName::staticMethodName
  • 特定对象的实例方法引用:instance::methodName
  • 特定类型的任意对象的实例方法引用:ClassName::methodName
  • 构造函数引用:ClassName::new

3. 如何使用方法引用?

接下来,我们用几个例子来详细了解如何使用方法引用。

3.1 静态方法引用 (类名::静态方法)

如果你有一个静态方法需要引用,可以使用ClassName::methodName的格式。例如:

List<String> strings = Arrays.asList("a", "b", "c");
// 使用lambda表达式
strings.forEach(s -> System.out.println(s));
// 使用方法引用
strings.forEach(System.out::println);

在这个例子中,我们使用了System.out::println来引用println方法。

3.2 特定对象的实例方法引用 (对象::方法名)

当你有一个已经存在的对象,想要引用其实例方法,你可以使用instance::methodName的格式。例如:

String string = "Hello, World!";
Supplier<String> supplier = string::toUpperCase;
System.out.println(supplier.get());  // 输出 HELLO, WORLD!

在这个例子中,我们创建了一个Supplier<String>对象,它引用了字符串实例stringtoUpperCase方法。

3.3 特定类型的任意对象的实例方法引用 (类名::普通方法)

有时候,你可能想要引用某个类的任意对象的实例方法,此时,你可以使用ClassName::methodName的格式。例如:

List<String> strings = Arrays.asList("a", "b", "c");
// 使用lambda表达式
List<String> upperCaseStrings = strings.stream().map(s -> s.toUpperCase()).collect(Collectors.toList());
// 使用方法引用
List<String> upperCaseStrings = strings.stream().map(String::toUpperCase).collect(Collectors.toList());

在这个例子中,我们使用了String::toUpperCase来引用toUpperCase方法。

3.4 构造函数引用 (类名::new )

如果你想要引用一个类的构造函数,你可以使用ClassName::new的格式。例如:

// 使用lambda表达式
Supplier<List<String>> supplier = () ->new ArrayList<>();
// 使用方法引用
Supplier<List<String>> supplier = ArrayList::new;

在这个例子中,我们引用了ArrayList的构造函数,创建了一个ArrayList实例。

4. 结论

  • 方法引用是对Lambda表达式符合特定情况下的一种缩写方式,它使得我们的Lambda表达式更加的精简,也可以理解为lambda表达式的缩写形式,不过要注意的是方法引用只能引用已经存在的方法
  • 希望通过本文,你已经对Java 8的方法引用有了深入的理解,现在就开始在你的代码中使用它吧!

欢迎持续关注本博客,我们会为你带来更多Java 8以及其他编程相关的有趣和实用的内容!


http://www.ppmy.cn/news/520837.html

相关文章

端午day1作业

字符设备驱动对象结构体&#xff1a;struct cdev 字符设备驱动对象申请空间&#xff1a; &#xff08;1&#xff09;struct cdev cdev;//直接分配一个变量空间 &#xff08;2&#xff09;struct cdev *cdevcdev_alloc(); struct cdev *cdev_alloc(void);//手动申请字符设备驱…

Cookie,Session,Token,JWT授权方式对比

文章目录 HTTPCookieSessionSession认证流程Session 共享方案 TokenToken认证流程 JWTJWT认证流程 HTTP HTTP 本质上是无状态的&#xff0c;每个请求都是互相独立、毫无关联的&#xff0c;协议不要求客户端或服务器记录请求相关的信息。服务端无法确认当前访问者的身份信息&…

【Servlet学习一】认识Servlet 创建第一个Servlet项目

目录 &#x1f31f;需要知道&#xff1a; &#x1f308;1、Tomcat是什么&#xff1f; &#x1f308; 2、Maven &#x1f31f;一、认识Servlet &#x1f308;1、Servlet是什么&#xff1f; &#x1f308;2、实现第一个Servlet项目。 &#x1f308;3、简单了解Postman工具…

【计组】微指令 微操作 微命令 微程序

区分四个概念 &#xff08;1&#xff09;微命令:微命令是构成控制信号序列的最小单位。通常是指那些直接作用于部件或控制门电路的控制命令。 &#xff08;2&#xff09;微操作:由微命令控制实现的最基本的操作称为微操作。 &#xff08;3&#xff09;微指令:以产生一组微命令&…

怎么将存入此电脑中的图片放入电脑D盘

先找到图片的目录&#xff0c; 目录为&#xff1a;xxx 然后 现在图片目录就移动到D盘了

CGB2103-day01

1.SpringMVC 1.1 框架的作用 接收前端传递的数据,与用户进行交互. 1.2 SpringMVC参数传递的格式 1.2.1 简单参数传值 <input type"text" name"username" value"admin" /><input type"text" name"age" …

CA证书验证

在学习https过程中对一个场景一直有疑惑&#xff1a; 在客户端请求服务端后&#xff0c;服务端会返回给客户端数字证书&#xff0c;但是数字证书可以被钻改啊&#xff0c;假的证书无法被解密&#xff0c;那如果用真的证书来替换呢&#xff1f; 后来找了相关资料才知道&#xff…

cocosCreator 3.3~6 安卓热更新官方详细示例

官方的热更新虽给出了示例和源码&#xff0c;但是一些细节的地方和步骤还是没说清楚&#xff0c;导致新手包括我死活是运行不起来&#xff0c;热更新失败&#xff01;很打击人啊。这里有必要给出新手的热更新步骤&#xff0c;前提是你安装了Node.js和python环境&#xff0c;我装…