我正在使用它:
List<String> row = new ArrayList<String>();
row.add("value 1");
row.add("value 2");
writer.writeRow(row);
其中输出的内容基本上是ArrayList toString()值:
"[value1, value2]"
如何获得以下内容?
"value1, value2"
答案 0 :(得分: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转换为Collection来解决。
mWriter.writeRow((Collection)row);
我知道这几乎就是Java的工作原理,但我认为如果不需要极端性能,大多数人会更喜欢避免原语,所以这应该是开箱即用的 - 可能采用不同的签名方法。
答案 1 :(得分:1)
图书馆的作者在这里。我刚刚更新它以解决这个烦恼 - 它本质上是一个带有泛型的新手错误。
正如您在this commit中看到的,方法签名是:
public final void writeRow(Collection<Object> row)
当您传递List<String>
时,它与正确的方法签名不匹配,并且会转到另一个接受Object varargs的方法。
我已更新代码以获得此签名,因为集合类型根本不重要:
public final void writeRow(Collection<?> row)
如果您更新到版本2.6.0,您最初发布的代码将生成正确的结果,无需投射任何内容。
不好意思。