Java8 中引入方法引用新特性,用于简化应用对象方法的调用,方法引用是用来直接访问类或者实例的已经存在的方法或者构造方法。方法引用提供了一种引用而不执行方法的方式,它需要由兼容的函数式接口构成的目标类型上下文。

计算时,方法引用会创建函数式接口的一个实例。 当 Lambda 表达式中只是执行一个方法调用时,不用 Lambda 表达式,直接通过方法引用的形式可读性更高一些。方法引用是一种更简洁易懂的 Lambda 表达式。

一、基本格式

方法引用使用一对冒号 :: 来简化对象方法的调用,当你想要使用方法引用时,目标引用放在分隔符 :: 前,方法名称放在后面, 如下形式:

方法引用参考示例:

二、方法引用分类

Java8 中对于方法引用主要分为三大类:

  • 构造器引用 Class::new
  • 静态方法引用 Class::static_method
  • 特定对象的方法引用 instance::method

2.1、构造器引用

语法是Class::new,或者更一般的Class< T >::new实例如下

借助构造器引用实例化 Iphone 对象,代码如下:

需要视频配套文档或更多资料+我们程序员小姐姐
v:lezijie007(加好友时备注: 66,不备注拒绝添加哟)
public class IPhone {private Integer id;private String version;private Date createTime;private String name;public IPhone() {}public IPhone(Integer id) {this.id = id;}public IPhone(Integer id, String name) {this.id = id;this.name = name;}...
}public static void main(String[] args) {/*** 构造器引用* 无参构造器*/// 实现Supplier 接口 通过构造器引用Supplier<IPhone> factory01= IPhone::new;IPhone p01 = factory01.get();System.out.println(p01);/*** 等价的Lambda 写法*/Supplier<IPhone> factory02 = ()->new IPhone();IPhone p02 = factory02.get();System.out.println(p02);/*** 当构造器方法存在参数 参数个数为1个时*/Function<Integer,IPhone> factory03 = IPhone::new;IPhone p03 = factory03.apply(2019);System.out.println(p03);/*** 等价的Lambda 写法*/Function<Integer,IPhone> factory04 = (id)-> new IPhone(id);IPhone p04 = factory04.apply(2019);System.out.println(p04);/*** 当构造器方法存在参数 参数个数为2个时*/BiFunction<Integer,String,IPhone> factory05 = IPhone::new;IPhone p05 = factory05.apply(2019,"iphoneX");System.out.println(p05);/*** 等价的Lambda 写法*/BiFunction<Integer,String,IPhone> factory06 = (id,name)-> new IPhone(id,name);IPhone p06 = factory06.apply(2019,"iphoneMax");System.out.println(p06);/**当构造器参数参过2个时怎么解决呢???**/}

2.2、静态方法引用

语法是Class::static_method,实例如下:

使用静态方法引用执行 IPhone 静态方法

public class IPhone {private Integer id;private String version;private Date createTime;private String name;public IPhone() {}public IPhone(Integer id) {this.id = id;}public IPhone(Integer id, String name) {this.id = id;this.name = name;}/**静态方法
*/public  static  void info(){System.out.println("这是一部IPhone");}
}/**
* 定义函数式接口
*/
@FunctionalInterface
public interface PrintFunction{void print();
}// 静态方法引用
PrintFunction pf01= IPhone::info;
pf01.print();
/*** 等价的Lambda 写法
*/
PrintFunction pf02 = () -> {IPhone.info();
};
pf02.print();// 静态方法引用 静态方法存在参数时
/**
* 定义函数式接口
*/
@FunctionalInterface
public interface PrintFunction02<T,R> {R print(T t);
}/*** 静态方法引用 方法存在参数时
*/
PrintFunction02<String,Double> pf03 = IPhone::getPrice;
System.out.println(pf03.print("iphone"));/**
* 等价的Lambda 写法
*/
PrintFunction02<String,Double> pf04 =(str)->{return IPhone.getPrice(str);
};

2.3、特定类的任意实例化对象的方法引用

语法是instance::method ,此时引用方法时必须存在实例,示例代码如下:

/**
* 构造器引用 实例化对象
* 成员方法引用
*/
BiFunction<Integer,String,IPhone> factory07= IPhone::new;
IPhone p07 = factory07.apply(2019,"iphoneX");
PrintFunction pp= p07::mm;
pp.print();/**
* 等价的Lambda 写法
*/
BiFunction<Integer,String,IPhone> factory08 = (id,name)-> new IPhone(id,name);
IPhone p08 = factory08.apply(2019,"iphoneMax");
PrintFunction pp02 = ()->{p08.mm();
};
pp02.print();/**
* 等价的Lambda 写法
*/
BiFunction<Integer,String,IPhone> factory08 = (id,name)-> new IPhone(id,name);
IPhone p08 = factory08.apply(2019,"iphoneMax");
PrintFunction pp02 = ()->{p08.mm();
};
pp02.print();
//

切克闹!Java8新特性之方法引用相关推荐

  1. 【java8新特性】——方法引用(四)

    一.简介 方法引用是java8的新特性之一, 可以直接引用已有Java类或对象的方法或构造器.方法引用与lambda表达式结合使用,可以进一步简化代码. 来看一段简单代码: public static ...

  2. Java8新特性 - 04 - 方法引用05 - 方式四 【类名::new】

    1.类名::new 1.将Lambda表达式 替换为 [类名::new] 的写法. 2.确保 [类的构造方法] 的 参数与返回值 和 Lambda表达式的一致! * 分析 : 匿名内部类的方式 : 正 ...

  3. 小司机带你用Java8新特性之方法引用

    基于网上千篇一律的xxx.forEach(System.out::println)示例,不利于初学者理解, 所以小编自己撸了两个示例: 以下代码: package com.demo.java8;pub ...

  4. JDK8新特性之方法引用

    转载自 JDK8新特性之方法引用 什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = ...

  5. Jdk1.8新特性(三)——方法引用::

    Lambda表达式可以用来创建匿名方法,有时候使用lambda表达式仅仅是调用一个已存在的方法: Arrays.sort(stringsArray,(s1,s2)->s1.compareToIg ...

  6. Java8新特性之构造器引用、方法引用

    构造器引用.方法引用 package com.stevenyin.methodref;import org.junit.Test;import java.io.PrintStream; import ...

  7. java8 构造函数引用_java8新特性之方法引用与构造器引用

    方法引用与构造器引用 关于lambda表达式,我们已经知道了,一般是有两部分组成.箭头操作符(->)左侧是lambda体的参数列表,右侧是lambda体,而lambda体里面的操作,有些情况下可 ...

  8. JDK 8 新特性 之 方法引用

    概述 方法引用:当要传递给Lambda体的操作,已经有实现的方法了,就可以使用方法引用 方法引用:在Lambda的基础上进一步的简化.换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实 ...

  9. 【Java】JDK8新特性之方法引用

    什么是方法引用 方法引用是只需要使用方法的名字,而具体调用交给函数式接口,需要和Lambda表达式配合使用. 如: List<String> list = Arrays.asList(&q ...

最新文章

  1. HTML加固5——汇总
  2. go语言的书籍的淘宝调查
  3. Android 全局悬浮按钮,悬浮按钮点击事件
  4. LeetCode38.报数
  5. 利用colab训练YOLOv5
  6. ubuntu16.04 离线安装docker ce
  7. 读后感:软件测试经验与教训
  8. Windows下安装solr步骤详解
  9. 使用VSCode编写LaTeX
  10. paip.jdbc 连接自动释放的测试
  11. 请熟悉SQL server的高手赐教。
  12. iOS从零开始,使用Swift:UIKit的第一步
  13. 计算机实践教程作业桌面管理截图,如何将电脑现在的桌面截图,并保存在考试题目里面...
  14. excel波士顿矩阵怎么做_excel矩阵图怎么做
  15. idea指定maven的settings文件不生效
  16. Unc0ver 8.0.0 更新:支持 iOS 14.6-14.8、A12-A13 iPhone 越狱
  17. 在德国注册商标的两种途径
  18. 西子子1200与编码器
  19. 毕设论文写作技巧 2021-10-9
  20. 苹果cms怎么用html5播放,苹果cms整合ckplayerx播放器教程

热门文章

  1. Orleans 2.0 官方文档 —— 3.1 核心概念 - 什么是grain
  2. Android 图片选择和拍照(剪辑)及压缩问题 工具类
  3. 2021年前端面试题及答案
  4. 百度语音合成Rest API使用
  5. 技美知识学习3700:现代移动端的TBR和TBDR渲染管线
  6. PHP获取系统时间的方法(毫秒数)
  7. 解决AJAX请求使PHP反应时间过长的问题
  8. 产品项目团队都有哪些角色概览
  9. 游戏党注意了,超80款Steam游戏可在优麒麟上畅玩
  10. jenkins的企业微信通知报错:No appropriate protocol