方法引用和构造器引用
1 方法引用#
若 Lambda 体中的内容有方法已经实现了,我们可以使用“方法引用”,
(可以理解为方法引用是Lambda表达式的另一种表现形式)
主要有三种语法形式
对象:: 实例方法名
类:: 静态方法名
类:: 实例方法名
注意:
① Lambda 体中调用的方法的参数列表和返回值类型,要与函数式
接口中抽象方法的函数列表和返回值类型保持一致
② 若Lanbda参数列表中的第一参数是实例方法的调用者,而第二个参数是实例方法的接受者,
可以使用 ClassName::方法名
public class TestMethodRef { //对象::实例方法名 @Test public void test1(){ PrintStream ps = System.out; Consumer<String> con = x -> ps.println(x); PrintStream ps1 = System.out; Consumer<String> con1 = ps1::println; con1.accept("ssssbbbb"); } @Test public void test2(){ Employee employee = new Employee(); Supplier<String> sup = employee::getName; String name = sup.get(); System.out.println(name); } //类:: 静态方法 @Test public void test3(){ Comparator<Integer> com = (x,y) -> Integer.compare(x,y); Comparator<Integer> com1 = Integer::compare; } // 类::实例方法名 @Test public void test4(){ BiPredicate<String,String> bp = (x,y) -> x.equals(y); BiPredicate<String,String> bp2 = String::equals; } }
2 构造器引用#
格式:className::new
注意:需要调用的构造器的参数列表要与函数式接口中,抽象方法的参数列表保持一致
//构造器引用 @Test public void test5(){ Supplier<Employee> sup = () -> new Employee(); Employee employee = sup.get(); //构造器引用的方式 // 根据函数式接口的参数列表来寻找对应的构造器 Supplier<Employee> sup1 = Employee::new ; System.out.println(sup1.get()); } @Test public void test6(){ //Employee::new 此时调用的构造器是一个参数的构造 Function<Integer,Employee> f = Employee::new; Employee e = f.apply(24); System.out.println(e.getAge()); BiFunction<Integer,String,Employee> bif = Employee::new; Employee houchen = bif.apply(24, "houchen"); System.out.println(houchen); }
3、数组引用#
Type::new
//数组引用 @Test public void test7(){ Function<Integer,String[]> f = (x) -> new String[x]; String[] strs = f.apply(10); System.out.println(strs.length); Function<Integer,String[]> fun2 = String[]::new; String[] strs2 = fun2.apply(5); System.out.println(strs2.length); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-12-28 oracle 的sign函数
2019-12-28 oracle decode函数的使用