java.util.function.Function能否接收两个参数?代码场景解析
代码运行机制解析
核心结论
concatenateTwoStrings方法没有让Function接收两个参数,也**不存在隐式转换为BiFunction**的情况。
逐段拆解逻辑
方法本身的作用
concatenateTwoStrings是个静态方法,它先接收一个Integer类型的参数id,然后返回一个Function<String, String>类型的函数实例。这一步相当于先把id“绑定”到后续要执行的逻辑里。Lambda的闭包特性
方法内部返回的str -> str.concat(id.toString())是个Lambda表达式,它利用闭包特性捕获了外部传入的id变量。这个Lambda只需要接收一个String类型的参数str,就能完成字符串拼接,完全符合Function<T,R>(单输入、单输出)的接口规范。主方法的执行流程
- 调用
Main.concatenateTwoStrings(12):传入12作为id,方法返回一个已经“记住”了id=12的Function实例。 - 调用这个实例的
apply("hello"):给Lambda传入str="hello",执行拼接操作"hello".concat("12"),最终输出hello12。
误解来源
你之所以觉得像是传了两个参数,是因为参数是分两次传递的:第一次给方法传12,第二次给返回的Function传hello。全程Function只处理一个参数,没有违背它的单参数定义。
内容的提问来源于stack exchange,提问作者Mandanna Thekkada
相关产品推荐
相关产品推荐

