我使用這個:單義性 - 如何正確地寫一行沒有基本數組
List<String> row = new ArrayList<String>();
row.add("value 1");
row.add("value 2");
writer.writeRow(row);
,輸出什麼本質上是一個ArrayList的toString()值:
"[value1, value2]"
如何獲取以下?
"value1, value2"
我使用這個:單義性 - 如何正確地寫一行沒有基本數組
List<String> row = new ArrayList<String>();
row.add("value 1");
row.add("value 2");
writer.writeRow(row);
,輸出什麼本質上是一個ArrayList的toString()值:
"[value1, value2]"
如何獲取以下?
"value1, value2"
更糟糕的是,頭被從列表中正確寫入:
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是如何工作的,但我想大多數人寧願避免如果不需要極致性能基元,所以這應該工作開箱 - 可能具有不同的簽名方法。
這裏的圖書館的作者。我剛剛更新了它來解決這個問題 - 它實質上是泛型的新手錯誤。
正如你可以看到this commit,該方法的簽名是:
public final void writeRow(Collection<Object> row)
當你傳遞一個List<String>
它不匹配正確的方法簽名,並要另外一個接受可變參數對象。
我已經更新的代碼有這個簽名集合類型不會在所有問題:
public final void writeRow(Collection<?> row)
如果更新到2.6.0版,你最初發布將產生的代碼正確的結果,無需施放任何東西。
對不起。