ClassName::methodName 是一个方法引用(Method Reference)的表示形式 主要用于简化Lambda表达式

在Java中,ClassName::methodName 是一个方法引用(Method Reference)的表示形式。这是Java 8引入的一个新特性,主要用于简化Lambda表达式。它允许你更简洁、更易读的方式引用一个已存在的方法。
方法引用分为以下几种类型:

1.静态方法引用:ClassName::staticMethodName
2.某个对象的实例方法引用:instance::instanceMethodName
3.类的任意对象的实例方法引用:ClassName::instanceMethodName
4.构造函数引用:ClassName::new

工作原理
当你有一个函数式接口,并且你需要使用一个已经存在的方法来实现这个接口的时候,你可以使用方法引用。
例如,考虑以下函数式接口:
@FunctionalInterface
interface Converter {
    int convert(String s);
}

假设你有一个静态方法:
public class StringConverter {
    public static int stringToInt(String s) {
        return Integer.parseInt(s);
    }
}

使用Lambda表达式,你可以这样实现Converter接口:

Converter myConverter = (s) -> StringConverter.stringToInt(s);
 

使用方法引用,你可以更简洁地写:
Converter myConverter = StringConverter::stringToInt;

当你调用 myConverter.convert("123") 的时候,它实际上调用的是 StringConverter.stringToInt("123")。
这样做的好处是,代码更简洁,可读性也更强。
示例
静态方法引用

public class Test {
    public static void printSomething(String something) {
        System.out.println(something);
    }

    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
        list.forEach(Test::printSomething);  // 使用静态方法引用
    }
}
 

某个对象的实例方法引用

public class Printer {
    public void printSomething(String something) {
        System.out.println(something);
    }

    public static void main(String[] args) {
        Printer printer = new Printer();
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
        list.forEach(printer::printSomething);  // 使用实例方法引用
    }
}
 

类的任意对象的实例方法引用
public class Test {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry");
        list.forEach(String::toUpperCase);  // 使用任意对象的实例方法引用
    }
}
 

构造函数引用

@FunctionalInterface
interface Factory<T> {
    T create();
}

class MyClass {
    MyClass() {
        System.out.println("MyClass Constructor Called");
    }

    public static void main(String[] args) {
        Factory<MyClass> factory = MyClass::new;  // 使用构造函数引用
        MyClass myClass = factory.create();
    }
}
 

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

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

相关文章

网页的快捷方式打开自动全屏--Chrome、Firefox 浏览器相关设置

Firefox 的全屏方式与 Chrome 不同&#xff0c;Chrome 自带全屏模式以及APP模式&#xff0c;通过简单的参数即可设置&#xff0c;而Firefox暂时么有这个功能&#xff0c;Firefox 的全屏功能可以通过全屏插件实现。 全屏模式下&#xff0c;按 F11 不会退出全屏&#xff0c;鼠标…

grafana对指标进行组合计算

在使用Grafana配置图表看板时&#xff0c;我们可能需要对多个查询条件筛选出来的结果进行计算&#xff0c;把计算结果生成最终的图表。此时需要用到transform功能【add field from calculation】&#xff1a;

flutter iOS 缺少通知权限,缺少位置权限

App Store Connect 亲爱的开发者, 我们发现了一个或多个问题与您的应用程序&#xff0c;“hayya附近的朋友Chat&Meet”1.0.3(1)最近的交付。您的交付是成功的&#xff0c;但您可能希望在您的下一次交付纠正以下问题: ITMS-90078:缺少推送通知授权-你的应用程序似乎注册了…

pytorch的卷积层池化层和非线性变化 和机器学习线性回归

卷积层&#xff1a; 两个输出的情况 就会有两个通道 可以改变通道数的 最简单的神经网络结构&#xff1a; nn.Mudule就是继承父类 super执行的是 先执行父类函数里面的 forward执行的就是前向网络&#xff0c;就是往前推进的&#xff0c;当然也有反向转播&#xff0c;那就是…

福建福州大型钢结构件3D扫描全尺寸三维测量平面度平行度检测-CASAIM中科广电

高精度三维扫描技术已经在大型工件制造领域发挥着重要作用&#xff0c;特别是在质量检测环节&#xff0c;高效、高精度&#xff0c;可以轻松实现全尺寸三维测量。本期&#xff0c;我们要分享的应用是在大型钢结构件的关键部位尺寸及形位公差检测。 钢结构件&#xff0c;是将多…

fabic.js Quadratic Curve /可控制的曲线

需要绘制一条可控制的贝塞尔曲线&#xff0c;发现fabic官网中一个demo有点类似。感兴趣的可以移步官网查看demo。 官网的demo是对于html 而言的&#xff0c;放在vue中需要变换一下&#xff0c;具体代码如下&#xff1a; <template><div class"dashboard-contai…

Android Kotlin 协程详解

前言 关于Kotlin基础和高阶函数又不熟悉的可以先参考文章&#xff1a; Android Kotlin 基础详解_袁震的博客-CSDN博客 Android Kotlin 高阶详解_袁震的博客-CSDN博客 什么是协程&#xff1f;要理解协程&#xff0c;就要将它和线程联系起来理解。 线程是什么&#xff1f;我…

个人所思所想录

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;CSDN实力新星&#xff0c;后端开发两年经验&#xff0c;曾担任甲方技术代表&#xff0c;业余独自创办智源恩创网络科技工作室。会点点Java相关技术栈、帆软报表、低代码平台快速开…

Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis 电子招标采购系统功能清单

项目说明 随着公司的快速发展&#xff0c;企业人员和经营规模不断壮大&#xff0c;公司对内部招采管理的提升提出了更高的要求。在企业里建立一个公平、公开、公正的采购环境&#xff0c;最大限度控制采购成本至关重要。符合国家电子招投标法律法规及相关规范&#xff0c;以及审…

在VMware虚拟机中固定CentOS系统ip(使用桥接模式)

目录 一、前置说明二、前置准备2.1、切换虚拟机网络为桥接模式2.2、查看本机网络信息 三、配置CentOS系统IP3.1、进入系统输入ip addr 查看本机网络配置名称3.2、查看网络配置目录&#xff0c;网络配置文件名称3.3、修改网络配置文件 ifcfg-ens33 固定IP3.4、重启网络 一、前置…

mac+idea中安装配置gradle方法

1. mac中安装gradle 1) 安装brew 2) 通过brew安装gradle brew install gradle 3) 配置JAVA_HOME环境变量 export JAVA_HOME$(/usr/libexec/java_home) 至此&#xff0c;gradle安装成功 2. idea中配置gradle 配置位置&#xff1a; idea->Settings->Build,Executi…

element table合并行或列 span-method

首先来看下官网上如何写的 <template><div><el-table:data"tableData":span-method"objectSpanMethod"borderstyle"width: 100%; margin-top: 20px"><el-table-columnprop"id"label"ID"width"18…

linux下解决tomcat错误问题

错误一&#xff1a; Linux下Tomcat启动报错&#xff1a;Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 原因&#xff1a;可能是Linux环境变了&#xff0c;需要在catalina.sh文件里指定JDK路径 解决方式&#xff1a; 在/bin/catalina.sh配置文件中加…

Vue语法

目录 事件处理器 是什么 案列 表单的综合案列 定义 常用功能 组件通信 定义 父传子 ​编辑 子传父 事件处理器 是什么 事件处理器是一种函数&#xff0c;用于响应和处理事件的触发。在编程中&#xff0c;当特定事件发生时&#xff0c;可以通过事件处理器来执行相应的…

八大排序(一)冒泡排序,选择排序,插入排序,希尔排序

一、冒泡排序 冒泡排序的原理是&#xff1a;从左到右&#xff0c;相邻元素进行比较。每次比较一轮&#xff0c;就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。 以从小到大排序为例&#xff0c;第一轮比较后&#xff0c;所有数中最大的那个数就会浮…

go语言初学(备忘)

1、安装 2 路径配置 C:\Program Files\Go\bin 3新建一个工程 4、下载VSCode 并安装插件 创建一个调试文件 在main目录下新建一个test.go脚本 package main import "fmt" func main() { fmt.Println("Hi 1111") fmt.Println("testasdf") } 断点…

MySQL学习系列(5)-每天学习10个知识

目录 1. 锁&#xff08;Locking&#xff09;和乐观锁与悲观锁2. 分布式系统中保证数据一致性3. MySQL的复制延迟问题及解决方法4. 索引比全表扫描更快的情况5. 分区剪枝&#xff08;Partition Pruning&#xff09;6. 使用 LIMIT 和 OFFSET 的技巧7. 使用 EXPLAIN 语句分析查询性…

免费获取独立ChatGPT账户!!

GPT对于每个科研人员已经成为不可或缺的辅助工具&#xff0c;不同的研究领域和项目具有不同的需求。如在科研编程、绘图领域&#xff1a;1、编程建议和示例代码: 无论你使用的编程语言是Python、R、MATLAB还是其他语言&#xff0c;都可以为你提供相关的代码示例。2、数据可视化…

算法、数据结构、计算机系统、数据库MYSQL、概率论、数学实验MATLAB、数学建模、马原、英语、杂项、QT项目

算法 冒号表达式 &#xff08;condition&#xff09;&#xff1f;x&#xff1a;y 可以三个条件 以此类推 &#xff08;condition1&#xff09;&#xff1f;x&#xff1a;&#xff08;condition2&#xff09;&#xff1f;y&#xff1a;z 判断三角形最简单的办法 bool canFormTr…

stm32---定时器输入捕获

一、输入捕获介绍 在定时器中断实验章节中我们介绍了通用定时器具有多种功能&#xff0c;输入捕获就是其中一种。 STM32F1除了基本定时器TIM6和TIM7&#xff0c;其他定时器都具有输入捕获功能 。输入捕获可以对输入的信号的上升沿&#xff0c;下降沿或者双边沿进行捕获&#xf…