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

时间:2016-10-20 00:24:09

标签: java reflection

我通过杰克逊转储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));
  }
}

我的特定类(以及我刚刚复制试用的抽象类)。有2个构造函数

public Bus() {} 
public Bus(Object[] component) {}

1 个答案:

答案 0 :(得分:3)

请参阅Problem with constructing class using reflection and array arguments

问题是newInstance已经占用了一系列对象。您需要将对象数组包装在另一个数组中。像这样:

component = {component}; // Wrap in a new object array
VehicleAbstract vehicle  = (VehicleAbstract) rowClass.getDeclaredConstructor(Object[].class).newInstance(component);

这就是您获取无效数量参数的原因 - 您将该对象数组中的每个项目作为单独的参数传递,而不是一个参数(对象数组)。