我正在通过jackson转储CSV。我有两个映射类,并希望将映射类传递给CSV导出方法。
我有一个抽象类,扩展到每个csv列格式。我将类的名称传递给导出函数,然后希望通过类的构造函数映射数据并将其转储为CSV。
一切都很好,直到我开始创建进行映射并要导出的类。
调用异常/参数数无效异常。
protected String mapTransactionsToCSV(List<Object[]> results, String rowClassName)
Class rowClass = Class.forName(rowClassName);
for (Object[] component : results)
VehicleAbstract vehicle = (VehicleAbstract) rowClass.getDeclaredConstructor(Object[].class).newInstance(component);
csv.append(mapper.writer(schema).writeValueAsString(vehicle));
}
}
我的特定类(和抽象类,我只是复制来尝试)。有两个构造函数
public Bus() {}
public Bus(Object[] component) {}
参见使用反射和数组参数构造类的问题
问题是newInstance
已经接受了一个对象数组。您需要将对象数组包装在另一个数组中。像这样:
component = {component}; // Wrap in a new object array
VehicleAbstract vehicle = (VehicleAbstract) rowClass.getDeclaredConstructor(Object[].class).newInstance(component);
这就是你得到一个无效的参数数的原因——你把对象数组中的每一项作为一个单独的参数传递,而不是一个参数(对象数组)