java8 (jdk 1.8) 新特性—— 方法引用+构造器引用

news2024/12/25 13:16:34

1. 方法引用

方法引用 其实 本质上 就是Lambda 表达式 ,之前已经知道 Lambda 是作为一个函数式接口的实例 ,因此,方法引用也就是一个函数式接口的实例

使用的情况:

  1. 当要将值传给Lambda 体,已经有实现的方法,不用自己在lambda 体里边写多行逻辑代码

  2. 接口中抽象方法的形参列表 和 返回值类 与 方法引用 的形参列表和返回值类型 相同

但是这两种使用的情况 只 适用 对象 : : 非静态方法 和 类 : : 静态方法

要是对lambda 体 是什么,跟函数式接口不明白,可以先看看这篇篇文章,循序渐进 java8 (jdk 1.8) 新特性——Lambda及函数式接口

使用格式,很简单,总体概括 类(对象) : : 方法名

细分:

对象 : : 非静态方法 (适用)

类 : : 静态方法 (适用)

类 : : 非静态方法 ,当发现,多个参数中,有一个参数是作为方法的调用方就可以使用 【这是 这种情况的特殊体现,后面举例】

  • 对象 : : 非静态方法

举个例子:

@Test
    public void tes10() {

        Consumer<String>  consumer = str -> System.out.println(str);

        consumer.accept("坚持就是胜利");

    }

这是没有简写成方法引用的写法,先来分析一下,简单的输出语句

System.out.println(str)

点开源码

在这里插入图片描述
在这里插入图片描述

println 是 PrintStream 的一个非静态方法 ,也就是说 System.out 代指 PrintStream 这个对象

     PrintStream ps  =  System.out;
        ps.println("坚持就是胜利");

在这里插入图片描述
之前说,要传值给lambda体,已经有实现的方法,就可以使用方法引用,这边有自己的输出方法

并且, 抽象方法的形参列表跟返回值类型 与 输出的 是一样的

在这里插入图片描述
因此,根据格式:

对象是 System.out 方法名:println 简写为

 Consumer<String>  consumer = System.out::println;
        
    consumer.accept("坚持就是胜利");

慢慢理解吧,用着用着就熟了

再来看:


  UserInfo userInfo = new UserInfo(1, "张三", 18); 
  Supplier<String>  su = () ->userInfo.getName();
  Supplier<String>  su = userInfo::getName;   

同样的对象有自己的方法

Supplier是一个 供给型的函数式接口,也是java8 后才有的

在这里插入图片描述
这边

getName()  无参  ,返回类型 string

 get()  无参  ,返回类型 string [泛型 T 但是我申明的是接收String ]


  • 类 : : 静态方法

比较两个数大小

Comparator<Integer> con  = (x,y) ->Integer.compare(x,y);
        con.compare(6,8);

分析 :

Comparator 中的 compare 有两个参数, 返回类型为 int

在这里插入图片描述
Integer 类 中的compare 方法 也是两个参数 ,返回值类型也是int

在这里插入图片描述
静态方法,因此:

  Comparator<Integer> con  = Integer::compare;
        con.compare(6,8);
  • 类 : : 非静态方法

还是比较两个数大小,这次使用compareTo ,一个非静态方法

 Comparator<Integer> con  = (t1,t2)->t1.compareTo(t2);
        con.compare(6,8);

可以看到这边参数t1是作为一个调用者,虽然他们参数不同

在这里插入图片描述
在这里插入图片描述
但可以使用 方法引用

      Comparator<Integer> con  = Integer::compareTo;
        con.compare(6,8);

2 . 构造器引用

构造器引用其实跟方法引用没什么差,八九不离十,只不过是换成了使用构造器

package com.test1.demo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

/**
 * @author Administrator
 */
@ToString
@Data
@AllArgsConstructor
@NoArgsConstructor
public class UserInfo {

    private Integer id;
    private String name;
    private Integer age;



}


无参构造才可以

   Supplier<UserInfo> supplier = () -> new UserInfo();
   
   Supplier<UserInfo> supplier = UserInfo::new;

因为 Supplier 的get 抽象 方法也是无参的

在这里插入图片描述

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

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

相关文章

【Python 随练】判断101到200的素数

题目&#xff1a; 判断 101-200 之间有多少个素数&#xff0c;并输出所有素数。 简介&#xff1a; 在本篇博客中&#xff0c;我们将解决一个常见的问题&#xff1a;判断101到200之间的素数&#xff0c;并输出所有素数的列表。我们将给出问题的解析&#xff0c;并提供一个完整…

2023年了要怎么理解原型和原型链

1.prototype和__proto__有什么不可告人的关系&#xff1f; 说道原型对象&#xff0c;那一定绕不开几个概念&#xff1a; prototype&#xff0c;__proto__,constructor。 首先解释一下prototype是什么&#xff0c;原型对象。V8引擎给所有函数内置的一个对象。也就是只要创建的…

瑞丽-伯纳德对流的拉格朗日拟序结构(FTLE场结果对比)

FTLE场&#xff0c;即有限李雅普诺夫指数场是识别拉格朗日拟序结构的一种方法&#xff0c;其主要思路是如下&#xff1a; 1、t时刻在场内均匀布置粒子 2、计算t–>tT时刻后粒子的位置&#xff0c;这里粒子任意时刻的速度有速度场插值得到 3、根据两个时刻的粒子位置计算得…

资讯 |智汇云舟受邀出席WGDC大会并获“年度最具创新力企业“奖项

5月17日&#xff0c;由泰伯网主办的第十二届WGDC2023全球地理信息开发者大会在北京隆重召开。开幕式上重磅发布了“2023年度最具创新力”榜单&#xff0c;智汇云舟凭借技术创新研发与应用方面取得的诸多突破&#xff0c;获数字孪生赛道“年度最具创新力企业"奖项。公司产品…

Django高级扩展之Paginator分页实现

在项目中很常见的一种功能&#xff0c;主要用于大量数据在一页显示过于冗长&#xff0c;分为一页显示多条数据&#xff0c;分隔为多页显示&#xff1b;并常与条件筛选结合使用。 目录 Paginator对象 创建对象 属性 方法 异常 Page对象 创建对象 属性 方法 Paginator与…

华为OD机试之阿里巴巴找黄金宝箱(I)

阿里巴巴找黄金宝箱(I) 题目描述 一贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0~N的箱子&#xff0c;每个箱子上面贴有一个数字&#xff0c;箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字…

Kubernetes Pod 生命周期

Pod 生命周期是其从创建开始至终止退出的事件范围。 Pod 状态 Pending API server 创建了 Pod 对象并已存入 etcd 中&#xff0c;但尚未调度完成或仍处于从镜像仓库下载镜像的过程中。Running Pod 已经被调度至某节点&#xff0c;并且所有容器都已经被 kubelet 创建完成。Suc…

spss分析方法-聚类分析

聚类分析是根据研究对象的特征&#xff0c;按照一定标准对研究对象进行分类的一种分析方法。下面我们主要从下面四个方面来解说&#xff1a; 实际应用理论思想建立模型 分析结果 一、实际应用 聚类分析的目标就是在相似的基础上收集数据来分类。 聚类源于很多领域&#xf…

安装虚幻引擎

1、下载和安装 Epic Games启动程序。 下载地址&#xff1a;https://www.unrealengine.com/zh-CN/download 进入网站你可以看到下载信息和推荐系统要求等&#xff1a; 点击“下载启动程序”即可下载&#xff0c;或者直接点击下载链接&#xff1a;https://epicgames-download1.ak…

37岁985硕士,投上千份简历无人问津......该何去何从

前言 简单自我介绍一下&#xff0c;我老刘&#xff0c;37岁失业的985硕士 &#xff0c;13年其实可以直接入编的我&#xff0c;其实都不需要考试了&#xff0c;可以直接入职&#xff0c;但是我并没有选择去&#xff0c;后面直接选择了新闻周刊干了四年&#xff0c;后面换了一家…

【福利】不用考试可以增持CSPM-2证书?有PMP证书才行!

2021年10月&#xff0c;中共中央、国务院发布的《国家标准化发展纲要》明确提出构建多层次从业人员培养培训体系&#xff0c;开展专业人才培养培训和国家质量基础设施综合教育。建立健全人才的职业能力评价和激励机制。由中国标准化协会&#xff08;CAS&#xff09;组织开展的项…

CSS查缺补漏之《过渡效果与动画效果》

过渡 过渡效果使用transition属性表示&#xff0c;设置在需要过渡效果的元素上&#xff0c;它可以在让元素从一种样式平滑过渡为另一种样式。下面会依次介绍其属性值~ 示例代码如下&#xff1a; <div class"box">世界你好 </div> .box {width: 200px…

多态下,为什么使用virtual修饰析构函数

多态下,为什么使用virtual修饰析构函数 问题&#xff1a; 用virtual修饰的析构函数和非虚函数的析构函数有什么区别&#xff1f; 当时以为&#xff1a;只有经过virtual修饰的析构函数&#xff0c;派生类生命周期结束时&#xff0c;才会自动的先调用派生类的析构函数&#xff0…

mybatisplus连接sqlserver配置

目录 前言&#xff1a; 一&#xff1a;所需依赖&#xff1a; 二&#xff1a;application.yml 三:分页插件 前言&#xff1a; 本文主要讲解连接sqlserver的配置 一&#xff1a;所需依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> &l…

hutool工具包的实用方法简单介绍

说明&#xff1a;Hutool是一个小而全的Java工具类库&#xff08;详细参考&#xff1a;https://hutool.cn/docs/#/&#xff09;&#xff0c;使用前需要先添加依赖 &#xff08;添加依赖&#xff09; <dependency><groupId>cn.hutool</groupId><artifactId…

Redis从入门到精通进阶篇之持久化RDB

文章目录 RDB持久化工作原理 Redis 6的持久化机制主要有两种&#xff1a;RDB&#xff08;Redis DataBase&#xff09;和AOF&#xff08;Append Only File&#xff09;。本文将详细介绍这两种持久化方式的工作原理和配置要点。 RDB持久化 RDB持久化是将当前进程的数据生成快照…

项目经理,35岁以后就很难再有竞争力了吗?

早上好&#xff0c;我是老原。 知乎热榜上有一个问题吸引了我的注意&#xff1a; 说句公道话&#xff0c;35岁确实是个坎&#xff0c;这个坎在吃青春饭的行业来说&#xff0c;格外明显。 体力和精力都大不如年轻人&#xff0c;从性价比的角度来说&#xff0c;公司还是不会用…

2.2ORBSLAM3之几种特征点提取方法

0.简介 本节对ORB特征、SIFT特征、SURF特征、Harris角点、Shi-Tomas角点的提取与描述子计算原理进行总结&#xff0c;其中Harris角点、Shi-Tomas角点是关键点&#xff0c;没有对应的描述子&#xff0c;一般用于光流跟踪(Vins系列算法)。 综合所有的特征检测算法来看&#xff…

win设置静态IP

win设置静态IP地址 前言 局域网&#xff0c;IP地址的管理方式主要有静态分配方式和动态分配方式。 静态分配IP地址是指给每一台计算机都分配一个固定的IP地址&#xff0c;优点是便于管理&#xff0c;特别是在根据IP地址限制网络流量的局域网中&#xff0c;以固定的IP地址或IP地…

Django高级扩展之tinymce富文本实现

目录 安装 在站点中使用 注册富文本应用 添加配置文件 创建模型类 生成迁移文件 执行表迁移 配置站点 富文本不显示解决 修改主题 修改语言设置 自定义视图使用 设置路由 视图 创建模板 总结 安装 pip install django-tinymce 安装过程如下&#xff1a; 在站点…