gpt4 book ai didi

java - 当您需要传递多种类型作为源时,实现 Spring 的 Converter 接口(interface)的最佳方法

转载 作者:行者123 更新时间:2023-12-02 01:57:08 25 4
gpt4 key购买 nike

您经常需要从一堆源对象中创建一个目标对象。

我知道唯一的一个选择 - 创建一个上层合成类,其中包含所需的类型作为其字段,并将其作为源传递给 Spring Converter。但也许可以更容易地做到这一点?

提前致谢。

最佳答案

默认情况下,Spring 似乎不提供公开任何类型功能的接口(interface),以允许您接受多个源对象。

根据定义,Converter 接口(interface)的签名仅接受 S,然后可以将其转换为 T。如果 Spring 将来能够提供一个能够接受多个输入对象(例如,SU)的接口(interface),然后将其用于创建一个 T 但从 Spring 5.x 开始,它仍然不存在。

如果您确实想使用 Converter 接口(interface)的实现,您可以执行以下任一操作:

  • 如果您要实例化自己,您很可能传入一个或对象通过构造函数。这将意味着实现类将开始有效地存储状态(即在我看来,这取代了简单转换器的工作)。

  • 创建一个转换器,它将接受进位对象作为其源。
    这种模式可以很容易地将两个对象转换为一个
    只需使用 Spring Pair 对象(假设您使用 Spring
    数据)。与 Pair 相关的文档可以在 here 找到。 .

假设您确实需要使用 Spring 特定的转换器(如果您将它们全局注册到FormatterRegistry,就是这种情况),那么上述两种方法都应该可以正常工作。

现在,假设上述情况并非如此,那么没有什么可以阻止您使用 native JDK 并使用 BiFunction 的实现。事实上,您可以更进一步,使该类成为一个组件,这意味着您可以随时注入(inject)它。这样做的权衡是什么?您将失去注册全局转换器的能力,但是如果您的项目没有使用它们,那么权衡是最小的(此处注意 Converter 实现是线程安全的)。

最后,没有什么可以阻止您创建自己的 @FunctionalInterface,您可以使用它在给定任意数量的输入源的情况下执行转换。

总而言之,没有 Spring 不提供开箱即用的方法来做到这一点。本来很好,但似乎不可用。

关于java - 当您需要传递多种类型作为源时,实现 Spring 的 Converter 接口(interface)的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52156482/

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