基本概念

格式

实例变量名 | 类名 :: 静态方法 | 实例方法

作用

简化Lambda表达式

示例

a -> System.out.println(a); <=> System.out::println



(a, b) -> a.compareTo(b); <=> String::compareTo;

形式

方法引入总共有四种表现形式:

类型 示例
引用静态方法 ContainingClass::staticMethodName
引用某个对象的实例方法 containingObject::instanceMethodName
引用某个类型的任意对象的实例方法 ContainingType::methodName
引用构造方法 ClassName::new

应用

POJO

public class Emp {
private int empno;
private String ename;
//其余方法略
}

引用静态方法####

	@FunctionalInterface
public interface StaticMethod {
int min(int a, int b);
} StaticMethod staticMethod = (a, b) -> Math.min(a,b);
StaticMethod staticMethod1 = Math::min;

引用某个对象的实例方法

@FunctionalInterface
public interface InstanceMethodOfParticularObject {
void setEmpName(String name);
} Emp emp = new Emp(1,"eName"); //普通Lambda表达式
InstanceMethodOfParticularObject instanceMethodOfParticularObject = name -> emp.setEname(name);
instanceMethodOfParticularObject.setEmpName("haha");
System.out.println(emp.getEname()); //方法引入--引用某个对象的实例方法
InstanceMethodOfParticularObject instanceMethodOfParticularObject1 = emp::setEname;
instanceMethodOfParticularObject1.setEmpName("xixi");
System.out.println(emp.getEname());

引用某个类型的任意对象的实例方法

@FunctionalInterface
public interface InstanceMethodOfArbitraryObject {
boolean equale(String a,String b);
} InstanceMethodOfArbitraryObject instanceMethodOfArbitraryObject = (a, b) -> a.equals(b);
InstanceMethodOfArbitraryObject instanceMethodOfArbitraryObject1 = String::equals; System.out.println(instanceMethodOfArbitraryObject1.equale("a","b"));
System.out.println(instanceMethodOfArbitraryObject.equale("a","a"));

引用构造方法

@FunctionalInterface
public interface ConstructorWithFullFields {
Emp getNewEmp(int empno,String ename);
} //无参构造
ConstructorWithNoField<Emp> constructorWithNoField = ()-> new Emp();
ConstructorWithNoField<Emp> constructorWithNoField1 = Emp::new; //全参构造
ConstructorWithFullFields constructorWithFullFields = ((empno, ename) -> new Emp(empno,ename));
ConstructorWithFullFields constructorWithFullFields1 = Emp::new;

总结

  1. 一般情况下,用方法引入代替普通Lambda表达式均满足以下条件:

    1. 返回值类型相同
    2. 参数类型及个数相同

比如第1/2/4种形式。

  1. 第3种形式比较特殊,需满足以下条件:

    1. 返回值类型相同
    2. 两个参数
    3. 类型相同

因此会自动适配,否则会报错,如:Non-Static method cannot be referenced from a static context

参考

  1. Method References
  2. 30分钟入门Java8之方法引用

最新文章

  1. 《JavaScript 源码分析》之 jquery.unobtrusive-ajax.js
  2. [CC]LOD技术
  3. java主函数的含义
  4. QQ通信原理及QQ是怎么穿透内网进行通信的? (转)
  5. Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例
  6. hdu-acm steps FatMouse&#39;s Speed
  7. UIStoryboard类介绍(如何从Storyboard中加载View Controller)
  8. JavaScript高级程序设计(第三版)第三章 基本概念
  9. 问题:Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED]—— 找不到网卡。
  10. linux学习笔记之shell
  11. JFinal Db + Record模式 - ORM 框架
  12. Oracle EBS-SQL (CST-3):检查零成本交易.sql
  13. QT的安装及环境配置
  14. Appium 【已解决】提示报错:Attempt to re-install io.appium.android.ime without first uninstalling.
  15. python 视图 (FBV、CBV ) 、Request 和Response对象 、路由系统
  16. codeforces-3
  17. js三元表达式
  18. ActiveQt框架 禁止弹出ActiveX控件交互提示
  19. RxJava2学习笔记(3)
  20. pageContext中page、request、session、application四种范围变量的用法。

热门文章

  1. [NOIp2012提高组]同余方程
  2. ajax请求的完整步骤
  3. TCP/IP协议随笔
  4. android常用工具收集
  5. File构建实例的路径:绝对路径和相对路径
  6. 机器学习笔记(4):多类逻辑回归-使用gluton
  7. SIGALRM信号和SIGCHID信号
  8. C#轻量级日志监控器EasyLogMonitor
  9. Google+ 团队的 Android UI 测试
  10. PL/SQL- ora-12154 &#39;&#39; TNS:could not resolve the connect identifier specified&#39;