Java [ 基础 ] 方法引用 ✨

✨探索Java基础✨

Java基础:方法引用

方法引用是Java 8中引入的一种新特性,它使得代码更加简洁和易读。方法引用提供了一种可以直接引用已有方法作为Lambda表达式的替代方案。本文将深入介绍方法引用的基本概念、使用方法、具体实例及其在实际开发中的应用。

什么是方法引用?

方法引用是一种可以直接引用或调用现有方法的简洁语法。它的语法格式是ClassName::methodName。方法引用的主要目的是为了减少Lambda表达式的冗余代码,使代码更加清晰和简洁。通过方法引用,我们可以避免一些重复代码,使代码更加模块化和易于维护。

方法引用的四种类型
  1. 引用静态方法
  2. 引用实例方法
  3. 引用对象的方法
  4. 引用构造器

我们将通过详细示例介绍每一种方法引用的使用。

1. 引用静态方法

静态方法引用使用语法:ClassName::methodName。例如:

import java.util.function.Function;

public class StaticMethodReference {
    public static void main(String[] args) {
        // 使用方法引用引用Integer类的静态方法parseInt
        Function<String, Integer> stringToInteger = Integer::parseInt;
        // 调用apply方法将字符串"123"转换为整数
        Integer result = stringToInteger.apply("123");
        // 输出结果:123
        System.out.println(result); 
    }
}

在这个示例中,Integer::parseInt是对Integer类的静态方法parseInt的引用。这种引用方式非常适用于将现有的静态方法转换为函数式接口实例。

2. 引用实例方法

实例方法引用使用语法:instance::methodName。例如:

import java.util.function.Consumer;

public class InstanceMethodReference {
    public static void main(String[] args) {
        // 定义一个字符串
        String str = "Hello, World!";
        // 使用方法引用引用System.out对象的println方法
        Consumer<String> printer = System.out::println;
        // 调用accept方法输出字符串
        printer.accept(str); // 输出:Hello, World!
    }
}

在这个示例中,System.out::println是对System.out对象的实例方法println的引用。这种方式非常适用于现有对象的实例方法。

3. 引用特定对象的方法

特定对象的方法引用使用语法:ClassName::methodName。例如:

import java.util.function.BiFunction;

public class ObjectMethodReference {
    public static void main(String[] args) {
        // 使用方法引用引用String类的实例方法equals
        BiFunction<String, String, Boolean> stringEquals = String::equals;
        // 调用apply方法比较两个字符串是否相等
        Boolean result = stringEquals.apply("test", "test");
        // 输出结果:true
        System.out.println(result); 
    }
}

在这个示例中,String::equals是对String类实例方法equals的引用。这种方式适用于将类的实例方法转换为函数式接口。

4. 引用构造器

构造器引用使用语法:ClassName::new。例如:

import java.util.function.Function;

class Person {
    private String name;

    // 定义一个构造器
    public Person(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "Person{name='" + name + "'}";
    }
}

public class ConstructorReference {
    public static void main(String[] args) {
        // 使用方法引用引用Person类的构造器
        Function<String, Person> personCreator = Person::new;
        // 调用apply方法创建一个Person对象
        Person person = personCreator.apply("John");
        // 输出结果:Person{name='John'}
        System.out.println(person); 
    }
}

在这个示例中,Person::new是对Person类构造器的引用。这种引用方式非常适用于工厂方法模式,可以创建对象的实例。

方法引用与Lambda表达式的对比

方法引用是Lambda表达式的一种简化形式,但两者有很多相似之处。方法引用的语法更加简洁,可以直接引用现有的方法,而Lambda表达式需要定义一个匿名函数。例如:

使用Lambda表达式:

// 使用Lambda表达式将字符串转换为整数
Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);

使用方法引用:

// 使用方法引用将字符串转换为整数
Function<String, Integer> stringToInteger = Integer::parseInt;

可以看出,方法引用使代码更加简洁,不需要再编写Lambda表达式中的参数和方法调用。

方法引用的优势
  1. 简洁性:方法引用可以使代码更简洁,减少不必要的Lambda表达式。
  2. 可读性:方法引用使代码更易读,开发者可以更容易理解代码的意图。
  3. 重用性:通过方法引用,可以直接重用已有的方法,而不需要再编写一遍逻辑。
实际应用中的方法引用

在实际开发中,方法引用可以用于各种场景,例如:

  • 集合操作:使用方法引用可以简化集合操作中的代码。例如,排序操作可以使用方法引用简化代码。

    import java.util.Arrays;
    import java.util.List;
    
    public class CollectionExample {
        public static void main(String[] args) {
            // 创建一个字符串列表
            List<String> names = Arrays.asList("John", "Jane", "Tom", "Alice");
            // 使用方法引用对列表进行排序
            names.sort(String::compareToIgnoreCase);
            // 输出结果:[Alice, Jane, John, Tom]
            System.out.println(names); 
        }
    }
    

  • 流操作:在流操作中,方法引用可以使代码更加简洁。

     
    import java.util.Arrays;
    import java.util.List;
    
    public class StreamExample {
        public static void main(String[] args) {
            // 创建一个字符串列表
            List<String> names = Arrays.asList("John", "Jane", "Tom", "Alice");
            // 使用方法引用将列表中的字符串转换为大写并输出
            names.stream()
                 .map(String::toUpperCase)
                 .forEach(System.out::println); // 输出:JOHN, JANE, TOM, ALICE
        }
    }
    

  • 线程操作:使用方法引用可以简化线程操作中的代码。

     
    public class ThreadExample {
        public static void main(String[] args) {
            // 使用方法引用创建并启动一个新线程
            new Thread(System.out::println).start();
        }
    }
    

总结

方法引用是Java 8引入的一个强大特性,使得代码更加简洁和易读。通过四种类型的方法引用,我们可以引用静态方法、实例方法、对象的方法以及构造器。

在实际开发中,合理使用方法引用可以提高代码的可维护性和重用性。希望通过本文的介绍,你能更好地理解和应用Java中的方法引用特性,为你的开发工作带来便利。

觉得有用的话可以点点赞 (*/ω\*),支持一下。

如果愿意的话关注一下。会对你有更多的帮助。

每天都会不定时更新哦  >人<  。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open3D 点云的旋转与平移

目录 一、概述 1.1旋转 1.2平移 二、代码实现 2.1实现旋转 2.2实现平移 2.3组合变换 三、实现效果 3.1原始点云 3.2变换后点云 一、概述 在Open3D中&#xff0c;点云的旋转和平移是通过几何变换来实现的。几何变换可以应用于点云对象&#xff0c;使其在空间中移动或旋…

MobPush iOS端海外推送最佳实现

推送注册 在AppDelegate里进行SDK初始化&#xff08;也可以在Info.plist文件中进行AppKey&#xff0c;AppSecret的配置&#xff09;并对通知功能进行注册以及设置推送的环境和切换海外服务器等&#xff0c;参考如下步骤代码&#xff1a; <span style"background-colo…

叮!云原生虚拟数仓 PieCloudDB Database 动态包裹已送达

第一部分 PieCloudDB Database 最新动态 支持动态配置查询簇 PieCloudDB 最新内核版本 v2.14.0 新增动态配置查询簇功能。PieCloudDB 动态配置查询簇功能实现可伸缩的并行化查询&#xff0c;可提升单个查询并行使用底层资源的能力&#xff0c;同时加快查询响应速度。 动态配…

redis,memcached,nginx网络组件

课程目标&#xff1a; 1.网络模块要处理哪些事情 2.reactor是怎么处理这些事情的 3.reactor怎么封装 4.网络模块与业务逻辑的关系 5.怎么优化reactor? io函数 函数调用 都有两个作用&#xff1a;io检测 是否就绪 io操作 1. int clientfd accept(listenfd, &addr, &l…

navicat Lite 版

navicat Lite 版&#xff1a; Navicat 出了一个 Navicat Premium 的Lite版。 官方现在链接&#xff1a;https://www.navicat.com.cn/download/navicat-premium-lite#windows 从官网可以看到现在能够下载最新版本 17&#xff0c;支持各种平台

大型语言模型能否生成可信的事实核查解释?——通过多智能体辩论实现可信可解释的事实核查

Can LLMs Produce Faithful Explanations For Fact-checking? Towards Faithful Explainable Fact-Checking via Multi-Agent Debate 论文地址:https://arxiv.org/abs/2402.07401https://arxiv.org/abs/2402.07401 1.概述 在数字化时代,对于迅速传播的错误信息,其核实与明…

模拟电子学基本概念+Keil5安装指南!!

2024-7-1&#xff0c;星期一&#xff0c;16:56&#xff0c;天气&#xff1a;阴转小雨&#xff0c;心情&#xff1a;晴。大家好啊&#xff0c;今天换了一个新的主题&#xff0c;为什么嘞&#xff0c;是因为截止到昨天&#xff0c;电路基础部分的内容已经暂时告一段落啦&#xff…

【智慧岛】自动跳过神器,比李跳跳更强的替代品!

大家好&#xff0c;我是坤坤黑科技&#xff01;手机App的开屏广告似乎成了我们日常生活的一部分。虽然它们只占用我们几秒钟的时间&#xff0c;但累积起来却是一个不小的数字。之前给大家分享了李跳跳的最新规则&#xff0c;但是还是有好多的朋友反馈有一些广告无法跳过。这是因…

JDBC1(JDBC相关类与接口 ​连接mysql数据库​ 测试 不同数据库厂商实现-MySQL和Oracle)

目录 一、JDBC 1. JDBC相关类与接口 1.1 DriverManager 1.2 Connection 1.3 Statement 4.ResultSet 2. JDBC工作原理 二、连接mysql数据库 1. 导入jar包 2. 使用DriverManager加载驱动类 3. Connection接口 4. Statement接口 5. ResultSet接口 ​编辑 6. 关闭并…

主成分分析(PCA)详解与Python实现

1. 引言 主成分分析&#xff08;PCA&#xff09;是一种统计方法&#xff0c;它通过正交变换将一组可能相关的变量转换成一组线性不相关的变量&#xff0c;这些不相关变量称为主成分。PCA常用于降维、数据压缩和模式识别等领域。 喜欢的伙伴们点个关注哦~~❤❤❤ 2. 理论基础…

第15周:RNN心脏病预测

目录 前言 二、前期准备 2.1 设置GPU 2.2 导入数据 2.2.1 数据介绍 2.2.2 导入代码 2.2.3 检查数据 三、数据预处理 3.1 划分训练集与测试集 3.2 标准化 四、构建RNN模型 4.1 基本概念 4.2 搭建代码 五、编译模型 六、训练模型 七、模型评估 总结 前言 &#…

掌握 Python 中 isinstance 的正确用法

&#x1f44b; 简介 isinstance() 函数用于判断一个对象是否是一个特定类型或者在继承链中是否是特定类型的实例。它常用于确保函数接收到的参数类型是预期的。 &#x1f4d6; 正文 1 语法 isinstance(object, classinfo) object参数是要检查的对象&#xff1b;classinfo参数…

幻兽帕鲁联机延迟高、无法联机、联机卡顿?这样解决

幻兽帕鲁是一款超人气的冒险游戏&#xff0c;该作曾被讽刺为抄袭怪、缝合怪&#xff0c;但是依旧架不住其在全球的爆火的架势&#xff0c;近期该作更新了游戏内的首个大型地图&#xff0c;并且还新增了区域系统上限、多人专用斗技场和部分游玩内容优化&#xff0c;也吸引了很多…

昇思25天学习打卡营第03天 | 张量 Tensor

昇思25天学习打卡营第03天 | 张量 Tensor 文章目录 昇思25天学习打卡营第03天 | 张量 Tensor张量张量的创建张量的属性Tensor与NumPy转换稀疏张量CSRTensorCOOTensor 总结打卡 张量 张量&#xff08;Tensor&#xff09;是一种类似于数组和矩阵的特殊数据结构&#xff0c;是神经…

AI智能在Type-C领域的应用

随着科技的飞速发展&#xff0c;Type-C接口凭借其卓越的性能和广泛的应用场景&#xff0c;已成为现代电子设备中不可或缺的一部分。而AI智能技术的兴起&#xff0c;为Type-C领域带来了革命性的变革&#xff0c;推动了其功能的进一步完善和应用领域的拓展。本文将探讨AI智能在Ty…

Redis缓存管理机制

在当今快节奏的数字世界中&#xff0c;性能优化对于提供无缝的用户体验至关重要。缓存在提高应用程序性能方面发挥着至关重要的作用&#xff0c;它通过将经常使用或处理的数据存储在临时高速存储中来减少数据库负载并缩短响应时间&#xff0c;从而减少系统的延迟。Redis 是一种…

基于深度学习的水果蔬菜检测识别系统(Python源码+YOLOv8+Pyqt5界面+数据集+训练代码 MX_004期)

系统演示&#xff1a; 基于深度学习的水果蔬菜检测识别系统 界面图&#xff1a; 技术组成&#xff1a; 深度学习模型&#xff08;YOLOv8&#xff09;&#xff1a; YOLOv8是基于YOLO系列的目标检测模型&#xff0c;具有较快的检测速度和良好的准确率&#xff0c;适合于实时应用场…

在 Java 中的使用Selenium 测试框架

Selenium 测试框架&#xff1a;在 Java 中的使用 Selenium 测试框架就是这样一个强大的工具&#xff0c;它为 Web 应用的自动化测试提供了全面且高效的解决方案。 一、Selenium 简介 Selenium 是一个开源的自动化测试工具集&#xff0c;专门用于测试 Web 应用程序。它支持多…

聊一聊质量测试框架

质量测试框架的概述&#xff1a; 质量测试框架是一个为测试人员提供指导、工具和技术的系统&#xff0c;用于确保软件满足预定的质量标准和用户需求。它涵盖了测试计划、测试用例设计、测试执行、结果分析和测试报告等多个方面。 质量测试框架相关术语&#xff1a; 外部性质的…

解决OneDrive “拒绝访问文件” 问题

问题描述&#xff1a; 在尝试将其他文件拖入oneDrive或是打开OneDrive中的文件时。出现如下报错&#xff1a; 拒绝访问文件 无法访问XXXXXXX中的文件。可能已移动或删除了此文件&#xff0c;或者受制于文件权限而不能访问。 ERR_ACCESS_DENIED 解决办法&#xff1a; 1. 找到O…