我試圖創建一個簡單的類來讀取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