我有一个大型对象模型,我想将其打印成自定义格式文本文件(最多可达100000行)。该模型由一个主类组成,它知道它的所有子元素(30个不同的类)。所以,我需要打印所有子元素及其属性。
我想过并尝试过使用toString。以这样一种方式实现它,即从主类调用toString也会以递归方式调用所有子元素的toString方法。主要问题是所有数据都进入一个字符串,如上所述,最多可能有100000行文本,所以这听起来不太好。我还需要为每个类创建/生成(使用Eclipse)toString方法。
另一个想法是使用一个接口,它将以相同的方式递归,然后我可以使用它一次打印行。问题是,我需要为每个类手动编写此实现,而不是使用Eclipse生成toStrings。
我很欣赏这种情景的想法。关键点是易于实现(和阅读)以及流畅的写作风格。
编辑:我正在实现一个标准(源自90年代:),这就是为什么输出将是“纯文本”,而不是格式化的XML甚至是JSON。答案 0 :(得分:2)
因此,定义接受Object
的接口(除非您为所有类共享接口或基类)和OutputStream
(或可能PrintStream
),即:
interface ObjectPrinter {
print(Object root, PrintStream out);
}
现在@BorisTheSpider建议使用反射迭代类成员的图形。如果您不知道反射是什么,请查看java reflection API。使用流的优点是,您可以在拥有它时打印值块。您不必在打印之前累积整个对象图,就像将所有对象图放入String
一样。
请注意,这不是一个半小时的项目。您必须关心所有基本类型,数组,集合,反向引用和循环,空值等。作为参考,您可以使用来自Apache commons的ToStringBuilder
或EqualsBuilder
。