当前位置: 首页 > 知识库问答 >
问题:

如何转换双向引用的bean?

陶原
2023-03-14

我编写了一些通用bean转换,它们一起使用来转换一个复杂的bean。有时输入bean具有双向引用,转换器陷入无限循环。我该怎么处理呢?

例如,输入是一个与B bean有关系的bean,而B bean恰恰与A实例有关系。当转换A对象开始时,B转换器调用转换A中的B字段,并且在转换B对象时,A转换器调用转换B类中的A字段,如您所知,转换器陷入无限循环。想想bean之间更复杂的关系,即关系图有两个以上的节点。

如何避免转换器中的无限递归?

共有1个答案

益麻雀
2023-03-14

对象引用形成一个网。

A -------> B
^--- C <---'

当序列化为XML、JSON或类似形式时,您正在构建一个树。由于树是一个更简单的形式的网络,你不能简单地复制一个到另一个。

A
'--> B
     '--> C
          '--> A (recursion alarm!)
               '--> ...

一个常见的解决方案是

A
'--> B
     '--> C
A(1)
'--> B(2)
     '--> C(3)
          '--> Stub that links to (1)

有关存储已序列化对象的技术细节:

  • 使用hashset似乎很方便,因为它不包含重复项-但由于它需要为所有项使用hashcodeequals方法,所以这通常不是一个好主意
  • 使用IdentityHashMap中的键可以使用,它将比较使用==的键,并且不包含重复项
  • 但由于您通常在添加项目之前检查集合是否已经包含该项目,因此您还可以使用arraylist并使用以下代码:collection.stream().anymatch(x->x==key)
 类似资料:
  • 问题内容: 如何使用PHP 用(我认为其称为单引号)替换(我认为它称为双引号)? 问题答案: 或重新分配

  • 在java中如何将BigDecimal转换为Double?我有一个要求,我们必须使用Double作为参数,但我们得到的是BigDecimal,所以我必须将BigDecimal转换为Double。

  • 第404页的“Java持久性2.0,最终发布”有以下示例: 示例3:从一个可嵌入类到另一个实体的一对一关联。 我希望员工内部有多个位置详细信息: 如何更改实体ParkingSpot以指向集合表EMP_LOCATION内的可嵌入Location细节。 应该是 替换为@ElementCollection? 非常感谢。

  • 问题内容: 我有以下xslt可以将数据转换为JQuery接受的格式。但是,由于JSON在数据字符串中不接受双引号,因此我需要用转义序列\代替“ XML: 当前的XSLT: 电流输出: 所需的输出: 问题答案: 将此模板添加到您的代码中 : 然后更改 : 至 : 您的完整转换现在变为 : 当此转换应用于提供的XML文档时 : 产生想要的正确结果 :

  • 我目前正在使用一个替换脚本来自动修复单引号和双引号。 但是,我找不到一个解决方案来更改嵌套在另一个双引号内的任何地方的双引号 “在'abc'开头和结尾有一些额外的文本” 目前,我只能自动修复这个类型,如果它在其他引号旁边(例如“abc”)使用一个简单的替换脚本 和

  • 问题内容: 这是适合此描述的命令行示例: 我已经尝试过'(不转义),URL编码(在另一端没有urldecoded!)和”(引号消失!),但没有成功。 问题答案: 如果您将“替换为Unicode编码的”(\ u0027),则可以使用: 奇怪,但是值得知道!