Java中大型对象模型的字符串表示形式



我有一个大的对象模型,我想打印成一个自定义格式的文本文件(可以多达100000行)。该模型由一个主类组成,它知道它的所有子元素(30个不同的类)。因此,我需要打印所有子元素及其属性。

我想过并尝试使用toString。通过这样一种方式实现它,即从主类调用toString也会递归地调用所有子元素的toString方法。主要的问题是所有的数据都在一个字符串中,正如前面提到的,最多可能有100000行文本,所以这听起来不太好。我还需要为每个类创建/生成(使用Eclipse) toString方法。

另一个想法是使用一个接口,它将以同样的方式递归,然后我可以使用它一次打印一行。问题是,我需要为每个类手工编写这个实现,而不是用Eclipse生成tostring。

我很欣赏这种场景的想法。关键是易于实现(和阅读)加上流畅的写作风格。

编辑:我正在实现一个标准(起源于90年代:),所以这就是为什么输出将是"纯文本",而不是格式化的XML甚至JSON。

好的,另一个更好的原因很简单。字符串将数据存储到字节数组中。您说您将创建10万行文本。如果每行包含100个字符,则为10M字节。我想这样的执行将是非常无效的。

所以,定义接受Object的接口(除非你为所有的类共享接口或基类)和OutputStream(或者可能是PrintStream),即:

interface ObjectPrinter {
    print(Object root, PrintStream out);
}

现在,@ boristheespider建议使用反射迭代类成员的图。如果你不知道反射是什么,看看java反射API。使用流的好处是,当你有值块时,你可以打印它。在打印之前,您不必像将全部放入String一样累积整个对象图。

要知道这不是一个半小时的项目。你必须关心所有的基本类型,数组,集合,反向引用和循环,空值等等。作为参考,您可以使用Apache commons中的ToStringBuilderEqualsBuilder

最新更新