gpt4 book ai didi

java - 具有空属性实例化策略的深度 bean 复制

转载 作者:行者123 更新时间:2023-11-29 09:25:02 25 4
gpt4 key购买 nike

我正在寻找将嵌套属性的平面 Map 深度复制到 bean 的最简单方法。一些嵌套属性是我想为其提供实例化策略的接口(interface)。例如:

Map<String, String> customer = new Map<String, String>();
customers.put("id", "123");
customers.put("address.line1", "221B Baker St.");

public class Customer {
private int id;
private Address address; //address is an interface
... getters/setters ...
}

请注意,我不想提供显式映射,只是提供一种为接口(interface)提供具体实例的策略。我假设 commons-beanutils 可以执行此操作,但它们是一个开放的 JIRA功能票。具有类似功能的库是 Google GSON,它提供了一个名为 InstanceCreator 的接口(interface)。 .

我已经在 beanutils 之上实现了一个解决方案,但是是否有内置此功能的 bean 转换库?

最佳答案

你有点表达两种不同的东西。更容易做的是你最初似乎描述的,深度嵌套的字符串映射。所以

put("id", "1")  -> map.put("id", "1")
put("address.line1", "221b") -> ((Map)map.get("address")).put("221B")

(为简洁起见,我忽略了实际的安全检查是那里的 map ,如果是则初始化,yadda yadda,所有这些让我们喜欢 java 简洁的做事方式的东西。)

并放置“a.b.c.d...”只是递归地钻取“.”的拆分

如果您真的想要“地址”。 (因为您在示例中引用了地址类)来引用地址类型的对象,这有点复杂,您将需要将前缀识别为类的东西,最好是响应 map 的自定义东西接口(interface),可以在遍历树时轻松实例化,并且知道如何根据输入字符串创建自身的对象。

我不确定第一个 beanutils 实现的细节,它不太难编写。但是嵌套的字符串映射很容易。您可以通过序列化(因为 HashMap 和字符串序列化)或使用 json 库轻松地将其打包,这应该采用嵌套的字符串映射,完全没有问题(google gson 运行良好)。

关于java - 具有空属性实例化策略的深度 bean 复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163009/

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