我遇到一个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
,我不明白)是应用于将从foo(someObject).apply(customEnum)
的初始呼叫传递的CustomEnum
。andThen
将从foo中的匿名函数(这是铸造某种程度上,我仍然不明白)的结果字符串,然后返回值someObject::getSomethingWithEnumParameter
。为什么不是返回类型只是someObject::getSomethingWithEnumParameter
的类型,为了讨论的缘故,我们会说它是Map<R,T>
。
如果有人能帮助我理解这个流程,我将不胜感激。
该代码很讨厌,如果该开发者在我的团队中,我会和他/她进行认真的谈话。完成该操作的正确方法是创建一个单独的方法,其主体是'return someObject.getSomethingWithEnumParam(someObject.toString());',因此可以将该方法的简单引用用作函数。 – VGR