2017-12-18 46 views

回答

1

更糟糕的是,頭被從列表中正確寫入:

List<String> headers = new ArrayList<String>(); 
headers.add("date"); 
writer.writeHeaders(headers); 

我看了看他們的一些例子(特別com.univocity.parsers.examples.CsvWriterExamples),看到輸出是正確

所以我就這樣:

String[] rowData = new String[2]; 
rowData[0] = "value 1"; 
rowData[1] = "value 2"; 
mWriter.writeRow(rowData); 

這也產生了一個正確的輸出。

由於還有一個帶有(Object ... object)參數的重載方法,我的猜測是Java使用該方法。

我的問題可以通過將List轉換爲集合來解決。

mWriter.writeRow((Collection)row); 

我知道這是相當多的Java是如何工作的,但我想大多數人寧願避免如果不需要極致性能基元,所以這應該工作開箱 - 可能具有不同的簽名方法。

1

這裏的圖書館的作者。我剛剛更新了它來解決這個問題 - 它實質上是泛型的新手錯誤。

正如你可以看到this commit,該方法的簽名是:

public final void writeRow(Collection<Object> row)

當你傳遞一個List<String>它不匹配正確的方法簽名,並要另外一個接受可變參數對象。

我已經更新的代碼有這個簽名集合類型不會在所有問題:

public final void writeRow(Collection<?> row)

如果更新到2.6.0版,你最初發布將產生的代碼正確的結果,無需施放任何東西。

對不起。