csv Java:是否可以动态添加属性?
我知道这不是最好的解决方案,但我需要在类上动态添加属性(以及相对方法get/set):每次属性名称(当然还有值)都必须不同。
为什么?简单
我必须使用一个类来打印一些CSV(CsvBuilderService)
使用另一个类初始化该类:
CSVBuilderService<DTO> builder = new CSVBuilderService<DTO>();
现在CSVBuilderService已初始化为打印DTO列表,DTO的属性名用作列,值用作行
问题是:DTO格式每次都可能改变,不同的列名和不同的列数。(每次都是来自不同表的查询结果)
所以,每次我都要用不同的名称向DTO动态添加不同数量的属性,有人有办法做到这一点吗
我没有搜索其他方法来生成CSV,因为我必须使用CsvBuilder,我不能使用任何其他方法
# 1 楼答案
是否可以动态生成代码
对ASM、{a2}、{a3}等
这是你的案子吗
可能没有。为什么?这方面的实际用例示例是自适应系统、高性能
当您对自适应系统进行编程和/或对性能有非常高的要求时,这是最好的解决方案之一
您应该使用OOP吗
可能是的
您应该编写所有类吗
可能不是。要生成CSV,您只需要字符串[]数组就可以知道标题,而对象[]数组就可以处理行。 编写一个类是没有问题的,它将根据您的输入(例如反射)和缓存生成元数据。 我想您应该更深入地了解一下,除了CSVBuilderService之外,您还有什么可以实现您的逻辑。也许扩展CSVBuilderService更简单
无论如何,如果您没有为您打算生成的每个特定类编写一些特定的算法,那么如果您只创建另一个CSV编写器,它将使用您输入的元数据编写CSV,您将受益更多。 它减少了GC开销和代码的复杂性
# 2 楼答案
因为您希望将
DTO
与查询的列相匹配,所以最简单的解决方案(至少对我来说是最干净的)是使用OO实现
DTO
的子类对于各种可能性,在这里研究基于类似子类的最佳方法然后,您只需要更新
CSVBuilderService
的初始化,以基于查询获得特定的构建器CSVBuilderService<T extends DTO>
。不知道那里发生了什么,我真的帮不了你更多。但这是我在项目中管理DAO时使用的解决方案