我试图创建一个简单的类来读取csv文件和内容存储在一个创建一个通用CsvReader
ArrayList<ArrayList<T>>.
我创建一个通用类CsvReader,这样我可以处理不同的数据类型:int,double,String。如果我有,说,双打的csv文件,我想象我会用我的课是这样的:
//possible method 1
CsvReader<Double> reader = new CsvReader<Double>();
ArrayList<ArrayList<Double>> contents = reader.getContents();
//possible method 2
CsvReader reader = new CsvReader(Double.class);
ArrayList<ArrayList<Double>> contents = reader.getContents();
但方法1不工作,因为类型擦除阻止你写像
rowArrayList.add(new T(columnStringValue));
代码
但我甚至无法在Double.class解决方案中传递。问题是,真正发生的事情是我需要我的类“参数化”(在这个词的一般意义上,而不是技术上的java泛型意义上),它具有以下属性:它具有接受单个字符串参数的类型。也就是说,创建,比如说,一个双csv文件行的ArrayList,我需要写:
StringTokenizer st = new StringTokenizer(line,",");
ArrayList<Double> curRow = new ArrayList<Double>();
while (st.hasMoreTokens()) {
curRow.add(new Double(st.nextToken());
}
在Double.class已经过去了,我可以用得到它的字符串构造函数
Constructor ctor = c.getConstructor(new Class[] {String.class});
但这有两个问题。最重要的是,这是一个普通的构造函数,它将返回一个Object类型,然后我不能将其转换为Double。其次,我会缺少“类型”检查的事实,我要求我的类传入一个字符串参数构造函数。
我的问题是:我该如何正确地实现这个通用CsvReader?
感谢, 约拿
谢谢!我认为这将工作得很好。 – Jonah 2010-09-19 18:58:58
@Jonah,如果它适合你,你应该接受答案;) – 2010-09-19 19:55:38
Colin,我该怎么做?我没有看到任何“接受”按钮.... – Jonah 2010-09-19 20:08:49