【发布时间】:2016-02-29 18:11:49
【问题描述】:
我有一个包含数百个字段的 Java bean,每个字段都可以递归地成为不同的字段和更多子 bean。我的问题是我需要从具有字段名称/值对的平面文件中加载值,但我没有字段的完全限定名称。
假设我有类 A 和 B。A 包含 B 的一个实例,B 包含一个名为 f 的字符串字段,它存储值 s。如果每个类的实例只是小写的类名,那么这个数据结构中f的全称就是a.b.f
实际上,我需要执行如下所示的操作,只是我实际上是在使用反射,因为我从文件中读取了字段名称。
... a.getB().setF(x); // 这过于简单化了;如果 a.b 为空,我还需要创建并分配 B 的实例。
但是,我真正想做的是一个简单的 a.setF(s)。
假设所有 bean 中没有重复的字段,我如何生成扁平 bean 并在两者之间进行转换?
一位同事提到Dozer,听起来它可以用于从扁平bean格式到分层bean格式的转换,但看起来我仍然需要生成扁平bean和映射。由于有数百个字段和数十个 bean,这绝对是我不想手动做的事情。
【问题讨论】:
-
反射和一些代码生成?
-
@DaveNewton 我忘了提,但这也是我目前在想的;我不确定是否已经有一些现成的库或代码,所以我不会重新发明轮子。
-
@rob 你能分享你的源平面数据文件的例子吗?这里的传统名称是什么?可能的数据格式有哪些?
-
如果您出于任何原因想要手动操作here's how converting to flat bean (map) can work
-
您可以尝试以下任何一种方法,也许:simple.sourceforge.net 或 beanio.org 或者只是使用反射并自己动手。