上一篇文章
https://blog.csdn.net/nvd11/article/details/126565044?spm=1001.2014.3001.5502
介绍了Lambda的函数引用

但是如果这个方法是某个类的构造函数。
那么还有1个新的写法
类名::new

例子:

Cat 类

package com.home.javacommon.study.lambda;import lombok.Data;
import lombok.NoArgsConstructor;@Data
@NoArgsConstructor
public class Cat {public Cat(String name, int age) {this.name = name;this.age = age;}private String name;private int age;}

注意, 由于Lombok 的@Data 注解, 这个类实际上已经实现了无参构造方法和重写了ToString()方法

ExampleConstruct1 类

@Component
@Slf4j
public class ExampleConstruct1 implements Example {@FunctionalInterfaceprivate interface CatServiceNoArgs{Cat getCat();}@FunctionalInterfaceprivate interface CatService{Cat getCat(String name, int age);}@Overridepublic void runApp() {CatServiceNoArgs catService1 = ()->new Cat();CatServiceNoArgs catService2=Cat::new;log.info(catService1.getCat().toString());log.info(catService2.getCat().toString());CatService catService3 = (name, age)->new Cat(name, age);CatService catService4=Cat::new;log.info(catService3.getCat("Alice", 3).toString());log.info(catService4.getCat("Bill", 4).toString());}
}

这里我们创建了两个接口
CatServiceNoArgs
CatService
1个是无参的接口函数, 1个是有参的

对于无参接口

CatServiceNoArgs catService1 = ()->new Cat();
CatServiceNoArgs catService2=Cat::new;

上面两行是等效的

对于另1个有参接口
lambok任然可以简写为:
CatServiceNoArgs catService2=Cat::new;

不需要指明参数

使用接口函数把参数输入就ok
log.info(catService4.getCat(“Bill”, 4).toString());

至于为什么不直接调用类构造函数?
Cat1 = new Cat(“bill”, 4)

这就涉及设计模式和编程思维了, 很多时候我们并不想把类暴露给下游的类。
大家可以学习下面向接口编程的思想, 这里就不展开了。

Lambda 构造方法引用 -- 类名::new相关推荐

  1. 3. lambda 方法引用

    lambda 方法引用分为4类,方法引用也受到访问控制权限的限制,可以通过在引用位置是否能够调用被引用方法来判断.具体分类信息如下: 类型 使用方式 静态方法 ContainingClass::sta ...

  2. 31.3 Java进阶之lambda方法引用

    文章目录 1.方法引用 1.1 复用已有方法传递lambda 1.2 : :操作符 1.2.1 object::instanceMethod 1.2.2 Class::staticMethod 1.2 ...

  3. Java:从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量

    报错Case Lambda表达式对dest添加对象,后续对dest变量修改(非内容修改),报错! List<String> dest = new ArrayList<>(); ...

  4. Error:(343, 83) java: 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量

    /*** 问题代码(只是为了重现错误,请忽略代码逻辑)*/ @Testpublic void test23(){ArrayList<Book> list = new ArrayList&l ...

  5. Java 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量问题解决

    问题报错: Error:(249, 93) java: 从lambda 表达式引用的本地变量必须是最终变量或实际上的最终变量 问题分析: 1.lambda 表达式引用的变量进行了多次赋值. 解决办法: ...

  6. Lambda方法引用

    1.Lambda表达式 1.1体验Lambda表达式[理解] 案例需求 启动一个线程,在控制台输出一句话:多线程程序启动了 实现方式一 实现步骤 定义一个类MyRunnable实现Runnable接口 ...

  7. lambda方法引用总结——烧脑吃透

    lambda是java8的新特性,基本使用比较容易理解,但有一个环节遇到了坎儿,那就是方法引用,尤其是类的实例方法引用,烧脑之后总结一下. 在需要函数参数的方法中,我们可以把另一个同类型的方法直接传入 ...

  8. lambda函数引用学习记录

    lambda表达式 当一个函数中的参数有一个接口,并且接口中只有一个需要实现的方法(java8之后接口中可以有默认方法default修饰) 比如接口: interface MyInterface{pu ...

  9. java8方法引用符合_Java8 方法引用和构造方法引用

    如果不熟悉Java8新特性的小伙伴,初次看到函数式接口写出的代码可能会是一种懵逼的状态,我是谁,我在哪,我可能学了假的Java,(・∀・(・∀・(・∀・*),但是语言都是在进步的,就好比面向对象的语言 ...

最新文章

  1. OpenCV直线拟合检测
  2. javascript之浏览器调试
  3. tsf php,TSF:腾讯推出的 PHP 协程方案
  4. 5中排序算法(冒泡,选择,插入,快速,归并)
  5. python科学计算笔记(十四)pandas数据过滤、清理、转换
  6. mysql 大量数据 更改索引_MySql——来自狂神说Java - 贤贤贤sir
  7. 调用多个thrift接口ttypes冲突的问题
  8. 优先队列练习(又是我大钟神)
  9. Atitit 技术学习 的方法总结 attilax总结 目录 1.1. 跨框架 1 1.2. 跨语言学习法 1 1.3. 概念学习法 1 1.1 在比较中学习 多语言  2 1 1.3 .2 在历史
  10. Atitti 存储引擎支持的国内点与特性attilax总结
  11. java jfif,win10保存图片成了jfif格式怎么办?
  12. 百度谷歌淘宝自定义搜索乱码问题的解决
  13. java EE crm代码_基于jsp的小型企业CRM-JavaEE实现小型企业CRM - java项目源码
  14. 浴血凤凰2020最新全自动辅助开发课程
  15. 团队项目开发流程总结
  16. leetcode 面试题 17.14. 最小K个数 大顶堆 小顶堆 快排
  17. “xxx”does not name a type 错误
  18. BZOJ 4627: [BeiJing2016]回转寿司 cdq
  19. 令夫妻关系和谐的五大秘诀
  20. bootice添加linux引导,bootice怎么添加win10引导_网站服务器运行维护

热门文章

  1. 长沙计算机学院王进,王进教授
  2. 机械革命蛟龙16K和蛟龙16区别
  3. Html5代码实现动态时钟
  4. 学大伟业:如何利用课余时间学习物理竞赛,搞定自主招生?
  5. java公路车的气嘴_自行车气嘴的分类、特性和打气的方法
  6. Pygame实战:打扑克嘛?Python教你“经典纸牌游戏21点”玩法
  7. 手把手教你用 Java 实现word、excel、ppt、txt等办公文件在线预览功能!
  8. 香港城市大学赵翔宇招收AI机器学习数据挖掘 全奖PhD/博后/RA
  9. 嵌入式面试(笔试)笔记1
  10. 走近棒球运动·芝加哥小熊队·MLB棒球创造营