我知道这不是最好的解决方案,但我需要动态地在类上添加属性(和相对方法get / set):每次属性名称(和当然的值)必须是不同的。
为什么?简单。
我必须使用一个类打印一些CSV,(CsvBuilderService)。
本课程初始化为另一个班级:
CSVBuilderService<DTO> builder = new CSVBuilderService<DTO>();
现在初始化CSVBuilderService以打印DTO列表,DTO的属性名称用作列,值用作行。
问题是:DTO格式每次都可以更改,不同的列名和不同的列数。 (它们每次都是来自不同表的查询结果。)
所以,我必须动态添加不同数量的属性到不同名称的DTO,有人有想法实现这个目标吗?
我没有搜索另一种制作CSV的方法,因为我必须使用CsvBuilder,我不能使用任何其他方法。
答案 0 :(得分:0)
由于您希望将DTO
与查询列匹配,因此更简单的解决方案(至少对我来说最干净)是使用OO。
为每种可能性实现DTO
的子类,在此基于相似的子类研究最佳的approch。
然后,您只需更新CSVBuilderService
的初始化,以根据查询获取特定构建器CSVBuilderService<T extends DTO>
。在不知道那里发生了什么的情况下,我无法真正帮助你。但这是我用来管理项目DAO的解决方案。
答案 1 :(得分:0)
是否可以动态生成代码?
是你的情况吗?
可能没有。为什么?实际用例的例子是自适应系统,高性能。
我知道这不是最好的解决方案
当您对自适应系统进行编程和/或对性能有很强的要求时,这是最好的解决方案之一。
你应该使用OOP吗?
可能是的。
你应该写所有课吗?
可能没有。要生成CSV,您只需要String []数组来识别标题,而Object []数组则需要处理行。 编写一个类没有问题,它会根据您的输入(例如反射)和缓存生成此元数据。 我想你应该深入了解除CSVBuilderService之外还有什么来实现你的逻辑。扩展CSVBuilderService可能更简单。
无论如何,如果你没有为你想要生成的每个特定类编写一些特定算法,如果只创建另一个CSV编写器,你将获益更多,它将使用输入中的元数据写入CSV。 它降低了GC开销和代码的复杂性。