有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

csv Java:是否可以动态添加属性?

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

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

使用另一个类初始化该类:

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

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

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

所以,每次我都要用不同的名称向DTO动态添加不同数量的属性,有人有办法做到这一点吗

我没有搜索其他方法来生成CSV,因为我必须使用CsvBuilder,我不能使用任何其他方法


共 (2) 个答案

  1. # 1 楼答案

    是否可以动态生成代码

    ASM、{a2}、{a3}等

    这是你的案子吗

    可能没有。为什么?这方面的实际用例示例是自适应系统、高性能

    I know that is not the best solution

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

    您应该使用OOP吗

    可能是的

    您应该编写所有类吗

    可能不是。要生成CSV,您只需要字符串[]数组就可以知道标题,而对象[]数组就可以处理行。 编写一个类是没有问题的,它将根据您的输入(例如反射)和缓存生成元数据。 我想您应该更深入地了解一下,除了CSVBuilderService之外,您还有什么可以实现您的逻辑。也许扩展CSVBuilderService更简单

    无论如何,如果您没有为您打算生成的每个特定类编写一些特定的算法,那么如果您只创建另一个CSV编写器,它将使用您输入的元数据编写CSV,您将受益更多。 它减少了GC开销和代码的复杂性

  2. # 2 楼答案

    因为您希望将DTO与查询的列相匹配,所以最简单的解决方案(至少对我来说是最干净的)是使用OO

    实现DTO的子类对于各种可能性,在这里研究基于类似子类的最佳方法

    然后,您只需要更新CSVBuilderService的初始化,以基于查询获得特定的构建器CSVBuilderService<T extends DTO>。不知道那里发生了什么,我真的帮不了你更多。但这是我在项目中管理DAO时使用的解决方案