Java8学习笔记(三)--方法引入
2024-10-16 07:31:31
基本概念
格式
实例变量名 | 类名 :: 静态方法 | 实例方法
作用
简化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;
总结
- 一般情况下,用方法引入代替普通Lambda表达式均满足以下条件:
- 返回值类型相同
- 参数类型及个数相同
比如第1/2/4种形式。
- 第3种形式比较特殊,需满足以下条件:
- 返回值类型相同
- 两个参数
- 类型相同
因此会自动适配,否则会报错,如:
Non-Static method cannot be referenced from a static context
参考
最新文章
- 《JavaScript 源码分析》之 jquery.unobtrusive-ajax.js
- [CC]LOD技术
- java主函数的含义
- QQ通信原理及QQ是怎么穿透内网进行通信的? (转)
- Java RMI 介绍和例子以及Spring对RMI支持的实际应用实例
- hdu-acm steps FatMouse&#39;s Speed
- UIStoryboard类介绍(如何从Storyboard中加载View Controller)
- JavaScript高级程序设计(第三版)第三章 基本概念
- 问题:Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED]—— 找不到网卡。
- linux学习笔记之shell
- JFinal Db + Record模式 - ORM 框架
- Oracle EBS-SQL (CST-3):检查零成本交易.sql
- QT的安装及环境配置
- Appium 【已解决】提示报错:Attempt to re-install io.appium.android.ime without first uninstalling.
- python 视图 (FBV、CBV ) 、Request 和Response对象 、路由系统
- codeforces-3
- js三元表达式
- ActiveQt框架 禁止弹出ActiveX控件交互提示
- RxJava2学习笔记(3)
- pageContext中page、request、session、application四种范围变量的用法。
热门文章
- [NOIp2012提高组]同余方程
- ajax请求的完整步骤
- TCP/IP协议随笔
- android常用工具收集
- File构建实例的路径:绝对路径和相对路径
- 机器学习笔记(4):多类逻辑回归-使用gluton
- SIGALRM信号和SIGCHID信号
- C#轻量级日志监控器EasyLogMonitor
- Google+ 团队的 Android UI 测试
- PL/SQL- ora-12154 &#39;&#39; TNS:could not resolve the connect identifier specified&#39;