Код ниже работает. У вас было две ошибки (за исключением синтаксической ошибки имени класса):
package com.test;
import java.io.IOException;
import java.lang.reflect.*;
import java.util.Arrays;
public class Test {
Test() throws ClassNotFoundException, InstantiationException,
IllegalAccessException, IllegalArgumentException,
SecurityException, InvocationTargetException, NoSuchMethodException {
}
private void m() throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, ClassNotFoundException, InstantiationException {
Class[] doubleArrayParamTypes = new Class[1];
doubleArrayParamTypes[0] = Double.class;
Class clazz = Class.forName("com.test.Test");
Object voObject = clazz.newInstance();
Double data = 5.0;
performMapping(clazz, "Address1", doubleArrayParamTypes, voObject, data);
}
public static void main(String... args) throws IOException,
ClassNotFoundException, InstantiationException,
IllegalAccessException, IllegalArgumentException, SecurityException, InvocationTargetException, NoSuchMethodException {
new Test().m();
}
/* Reflection to set the data */
@SuppressWarnings("unchecked")
private void performMapping(Class clazz1, String methodName, Class[] clazz,
Object voObject, Double data)
throws IllegalArgumentException, SecurityException,
IllegalAccessException, InvocationTargetException,
NoSuchMethodException {
for (Method m : clazz1.getMethods()) {
System.out.println(m.getName()+ " " + Arrays.toString(m.getParameterTypes()));
}
clazz1.getMethod("set" + methodName, clazz).invoke(voObject, data);
}
public void setAddress1(Double arg) {
System.out.println(arg);
}
}
- Как указали другие авторы, вы добавили "set" два раза к имени метода
- Вы пытались передать
String
String data="TestData";
в качестве аргумента, даже если вы указали, что аргумент должен иметь тип Double
: doubleArrayParamTypes[ 0 ] = Double.class;