网站首页 > 基础教程 正文
java8 lambda表达式系列历史文章
什么是方法引用?
Lambda还有一个非常重要的功能,就是方法引用。方法引用可以理解为lambda表达式的简便写法。方法引用是用来直接访问类或者实例的已经存在的方法或构造方法(函数),它比lambda表达式更加的简洁,更高的可读性,更好的复用性。
方法引用的语法
类名(或实例)::方法名
方法引用的分类
对象方法引用的定义
1.抽象方法的第一个参数类型刚好是实例方法的对象类型;
2.抽象方法剩余的参数恰好可以当做实例方法的参数。
如果函数式接口的实现能满足以上的2个条件,就可以称之为对象方法引用。
对象方法引用的示例
废话少说,直接上干货,代码示例中都有重要注释
无输入参数,无返回值
1.第一个参数g类型为Girl,没有其它参数,说明要调用无参方法
2.同时g作为body体调用run方法的对象,run方法刚好没有参数
public class LambdaObjectMethodTest {
@Test
public void test(){
/**
* 满足了对象方法引用条件:
* 1.第一个参数g类型为Girl,没有其它参数,说明要调用无参方法
* 2.同时也是body体调用方法的对象,run方法刚好没有参数
*/
Consumer<Girl> c1 = (Girl g) -> g.run();
c1.accept(new Girl());
}
}
class Girl{
public void run(){
System.out.println("girl in running...");
}
}
有参数,无返回值
1.第一个参数g类型为Girl
2,第二个参数String 类型,作为调用eat方法的参数 2.同时g作为body体调用方法eat的对象
public class LambdaObjectMethodTest2 {
@Test
public void test(){
/**
* 满足了对象方法引用条件:
* 1.第一个参数g类型为Girl2,第二个参数String 类型,作为调用eat方法的参数
* 2.同时g作为body体调用方法eat的对象
*/
BiConsumer<Girl2,String> c1 = (Girl2 g, String f) -> g.eat(f);
c1.accept(new Girl2(),"苹果");
}
}
class Girl2{
public void eat(String food){
System.out.println("girl eat "+food);
}
}
有参数,有返回值
1.第一个参数g类型为Girl3,第二个参数为String类型,符合g对象的getAge的参数类型
2.同时g也是body体调用方法getAge的对象,刚好参数类型及个数匹配
public class LambdaObjectMethodTest3 {
@Test
public void test() {
/**
* 满足了对象方法引用条件:
* 1.第一个参数g类型为Girl3,第二个参数为String类型,符合g对象的getAge的参数类型
* 2.同时g也是body体调用方法getAge的对象,刚好参数类型及个数匹配
*/
BiFunction<Girl3,String, Integer> bf1 = (Girl3 g, String name) -> g.getAge(name);
int age = bf1.apply(new Girl3(),"爱莎公主");
System.out.println(age);
}
}
class Girl3 {
public Integer getAge(String name) {
System.out.println(name + "is " + 20 + " old.");
return 20;
}
}
大家可以看出上述示例都是类Girl、Girl2、Girl3都有默认构造方法,若是带参构造方法又如何实现对象方法引用呢?作为作业留给大家练习。
下一章节将为大家分享构造方法引用,请大家持续关注。如有问题或不妥之处,欢迎拍砖。
猜你喜欢
- 2024-11-30 Java开发「函数式编程」——Lambda表达式
- 2024-11-30 Java 中的 Supplier:让数据生成更灵活
- 2024-11-30 Java 中的 Predicate:让判断逻辑更清晰灵活
- 2024-11-30 Java8精华-函数式编程(一)读完这篇,你将彻底理解
- 2024-11-30 你知道实现一个JAVA接口有几种方式吗?配合lambda更加意想不到
- 2024-11-30 java8精华-函数式编程-Predicate(四)
- 2024-11-30 巧妙应用 Java 的 Functional Interface:让代码更简洁、更灵活
- 2024-11-30 函数式接口编程真没那么难,简单几行让你的代码更优雅
- 2024-11-30 初窥函数式接口,不会取标题,没有噱头,全是干货
- 2024-11-30 JDK8新特性:函数式接口@FunctionalInterface
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)