如何在java中通过反射调用构造函数



我正在通过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);

这就是你得到一个无效的参数数的原因——你把对象数组中的每一项作为一个单独的参数传递,而不是一个参数(对象数组)

相关内容

  • 没有找到相关文章

最新更新