Java:可以动态添加属性吗?

时间:2017-05-03 09:20:30

标签: java csv

我知道这不是最好的解决方案,但我需要动态地在类上添加属性(和相对方法get / set):每次属性名称(和当然的值)必须是不同的。
为什么?简单。

我必须使用一个类打印一些CSV,(CsvBuilderService)。

本课程初始化为另一个班级:

CSVBuilderService<DTO> builder = new CSVBuilderService<DTO>();

现在初始化CSVBuilderService以打印DTO列表,DTO的属性名称用作列,值用作行。

问题是:DTO格式每次都可以更改,不同的列名和不同的列数。 (它们每次都是来自不同表的查询结果。)

所以,我必须动态添加不同数量的属性到不同名称的DTO,有人有想法实现这个目标吗?

我没有搜索另一种制作CSV的方法,因为我必须使用CsvBuilder,我不能使用任何其他方法。

2 个答案:

答案 0 :(得分:0)

由于您希望将DTO与查询列匹配,因此更简单的解决方案(至少对我来说最干净)是使用OO。

为每种可能性实现DTO的子类,在此基于相似的子类研究最佳的approch。

然后,您只需更新CSVBuilderService的初始化,以根据查询获取特定构建器CSVBuilderService<T extends DTO>。在不知道那里发生了什么的情况下,我无法真正帮助你。但这是我用来管理项目DAO的解决方案。

答案 1 :(得分:0)

是否可以动态生成代码?

是。 ASMjavassistjavapoet

是你的情况吗?

可能没有。为什么?实际用例的例子是自适应系统,高性能。

  

我知道这不是最好的解决方案

当您对自适应系统进行编程和/或对性能有很强的要求时,这是最好的解决方案之一。

你应该使用OOP吗?

可能是的。

你应该写所有课吗?

可能没有。要生成CSV,您只需要String []数组来识别标题,而Object []数组则需要处理行。 编写一个类没有问题,它会根据您的输入(例如反射)和缓存生成此元数据。 我想你应该深入了解除CSVBuilderService之外还有什么来实现你的逻辑。扩展CSVBuilderService可能更简单。

无论如何,如果你没有为你想要生成的每个特定类编写一些特定算法,如果只创建另一个CSV编写器,你将获益更多,它将使用输入中的元数据写入CSV。 它降低了GC开销和代码的复杂性。