【发布时间】:2017-07-21 03:44:12
【问题描述】:
我在一个 Java 项目中遇到过以下代码,我不知道该怎么做:
public Function<CustomEnum,String> foo(SomeObject someObject) {
return ((Function<CustomEnum,String>) (someObject::toString)).andThen(r -> someObject::getSomethingWithEnumParameter);
}
我真的不明白如何将某些东西转换为功能接口。这到底是什么意思?
返回值的结果类型不会是 someObject 的任何值吗?
Function<CustomEnum, String> 不是定义了一个匿名函数,它接受 CustomEnum 类型并返回 String?
我已经阅读了Function<T,R> 的 java 文档,老实说,这与我阅读文档之前相比没有多大意义。
这就是我认为正在发生的事情。
foo 正在返回一个匿名函数,该函数应用于某些
CustomEnum以返回一个字符串foo 内部的匿名函数(不知何故被强制转换为
someObject::toString,我不明白)应用于CustomEnum,它将从foo(someObject).apply(customEnum)的初始调用传递。andThen将从 foo 内部的匿名函数中获取结果字符串(我仍然不明白它以某种方式强制转换),然后返回someObject::getSomethingWithEnumParameter的值。为什么返回类型不只是someObject::getSomethingWithEnumParameter的类型,为了讨论,我们会说是Map<R,T>。
如果有人能帮助我理解这个流程,我将不胜感激。
【问题讨论】:
-
该代码令人讨厌,如果该开发人员在我的团队中,我会与他/她进行认真的交谈。实现这一点的正确方法是创建一个单独的方法,其主体为
return someObject.getSomethingWithEnumParam(someObject.toString());,因此对该方法的简单引用可以用作函数。
标签: java functional-programming functional-interface