我有一个CSV文件,我解压缩。 这里是提取数据的例子:从CSV结构动态创建Java类
name;town;zipcode
foo;bar;55555
test;there;6666
我想要什么,是在飞行中(因为它包含的字段也就是第一行),将匹配的CSV结构创建对应的类。
是否有可能用Java在运行时创建该类(即时)并将其用作“普通”类(Person person = new Person()
)?
问候。
我有一个CSV文件,我解压缩。 这里是提取数据的例子:从CSV结构动态创建Java类
name;town;zipcode
foo;bar;55555
test;there;6666
我想要什么,是在飞行中(因为它包含的字段也就是第一行),将匹配的CSV结构创建对应的类。
是否有可能用Java在运行时创建该类(即时)并将其用作“普通”类(Person person = new Person()
)?
问候。
有可能做到这一点......但我不认为这是一个好主意。
基本上,你将需要:
那么,为什么我认为这是一个坏主意?几个原因...
“直观”字段的类型的步骤是启发式的,可能是不可靠的。例如,虽然我们认为"55555"
是一个数字,但事实上它是一个符号,并且可以(可以说)更好地表示为一个字符串。 (例如,假设该文件的第3行有一个英国邮政编码"CB2 1QG"
,而不是美国的邮递区号。)
生成的类几乎有反射性地使用。 Java是一种静态类型的编程语言,您不能编写静态类型的代码来使用API在编译时不为人知的类。这意味着......比如......在你的问题
Person person = new Person();
示例代码无法编译,直到后,你会生成并从CSV文件编译的类。 (它甚至会是棘手的使用使用反射生成的类,除了做完全通用的东西。)
底线是,你可能是最好关闭或者编写类CSV文件根据你对这些领域实际意义的理解。如果你确实生成了这个类,那么可能将它作为一个开发时间活动来完成,这样你就可以编写(或生成)可以对该类进行静态编译的代码。
+1的解释,该类将不得不反思性地使用。 – Avi 2012-01-05 20:58:26
要么你有字段的完整列表,在这种情况下,你可以建立一个Person类的所有字段,以及哪些领域可填充的CSV确定...
如果你想让它更加动态,要么使用散列表或通过斯蒂芬C描述的麻烦...
但超越方法你想要做什么?
是的我假设你可以使用反射,但为什么你想要做这样的事情?你试图解决什么问题? – gideon 2012-01-05 07:29:20
CSV字段可以改变...我想探索这种编程技巧。 – Dieeego 2012-01-05 07:46:05
首先没有什么理由:编译时“定义”类对于在运行时可能会有所不同的数据有什么好处?处理这种情况的正确方法是通过散列表。 – Viruzzo 2012-01-05 09:25:56