Lambda表达式基础(11)-实例方法引用的语法是什么?

本文介绍了Java中实例方法引用的两种语法。一种类似于静态方法引用,使用“对象引用::标识符”的形式;另一种则使用“类型引用::标识符”,由编译器转换为带有接收者的lambda表达式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实例方法引用的语法是什么?

引用静态方法的语法在前一节已经提到过了。有两种引用实例方法的方式。一种是严格类似于静态引用的方式,用“对象引用::标识符”替换“类型引用::标识符”。例如:forEach方法可以用来传递集合中的每个元素给一个实例函数来处理:
pointList.forEach(System.out::print);

这不是实例方法引用最有用变型,但是,forEach的该参数(或任何其他接受这样一个函数的方法)不能引用它正在处理的元素。相反,假定pointList的元素属于一个类TransPoint其有一个方法
void transpose () { int t = x; x = y; y = t; };

我们经常想以这种形式书写:
 pointList.forEach(/*transpose x and y of this element*/);

实例方法引用的第二个语法变型支持这种用法。类似于:
TransPoint::transpose

——其中引用类型而不是对象引用用于与实例方法名连接在一起使用——其由编译器翻译成这样一个lambda表达式:
(TransPoint pt) -> { pt.transpose(); }

——也就是说,一个lambda表达式被合成一个单一的参数,然后将其用作接收实例方法的调用。所以语法
pointList.forEach(TransPoint::transpose);

达成我们想要的结果。相同的变换可以应用到使用任何数量参数的实例方法,在每一种情况下,一个额外的参数,即接收方,调用参数之前被插入。

原文链接:http://www.lambdafaq.org/what-is-the-syntax-for-instance-method-references/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值