gpt4 book ai didi

java - 函数式接口(interface)对象转换

转载 作者:行者123 更新时间:2023-12-02 03:07:27 54 4
gpt4 key购买 nike

我在 Java 项目中遇到了以下代码,但我不知道如何理解它:

public Function<CustomEnum,String> foo(SomeObject someObject) {
return ((Function<CustomEnum,String>) (someObject::toString)).andThen(r -> someObject::getSomethingWithEnumParameter);
}

我真的不明白如何将某些东西转换为函数式接口(interface)。这到底意味着什么?

返回值的结果类型不是会是 someObject 的任何值吗?

不是 Function<CustomEnum, String>定义一个采用 CustomEnum 类型的匿名函数并返回 String

我已阅读 Function<T,R> 的 java 文档,说实话,这并没有比我阅读文档之前更有意义。

这就是我相信正在发生的事情。

  1. foo 正在返回一个应用于某些 CustomEnum 的匿名函数。返回一个字符串

  2. foo 内部的匿名函数(以​​某种方式转换到 someObject::toString ,我不明白)应用于 CustomEnum将从 foo(someObject).apply(customEnum) 的初始调用中传递.

  3. andThen将从 foo 内部的匿名函数中获取结果字符串(以某种方式进行转换,我仍然不明白),然后返回 someObject::getSomethingWithEnumParameter 的值。为什么返回类型不只是 someObject::getSomethingWithEnumParameter 的类型,我们会说是 Map<R,T> ,以供讨论。

如果有人能帮助我理解这个流程,我将不胜感激。

最佳答案

在理想的世界中,这是可行的:

public Function<CustomEnum,String> foo(SomeObject someObject) {
return (someObject::toString).andThen(...);
}

然而,Java 需要接口(interface)类型才能从方法引用隐式创建接口(interface)实例,因此需要显式转换才能转换为 Function 接口(interface)类型。

一旦你有了 Function 的实例,你就可以正常调用它的任何方法,在本例中是 andThen方法,将其与另一个函数对象组合形成一个新函数。

分解:

someObject::toString是隐含类型 Function<CustomEnum, String> 的方法引用。 IE。 toStringSomeObject 上的一个方法它采用 CustomEnum 类型的参数并返回 String .

r -> someObject::getSomethingWithEnumParameter但类型错误 - 它是一个返回函数的函数。如果去掉“r ->”部分那么它是有效的,只要someObject::getSomethingWithEnumParameterSomeObject 上的一个方法这需要 String并返回 String 。或者返回类型 foo需要更改为 Function<CustomEnum, Function<String, String>> .

如果将这两者与 andThen 结合起来那么你就有了 Function这需要 CustomEnum并返回 String ,作为 foo 的返回类型.

关于java - 函数式接口(interface)对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41557590/

54 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com