Если метод принимает не-примитивный тип данных, то для вызова частного метода любого класса можно использовать следующий метод:
public static Object genericInvokMethod(Object obj, String methodName,
int paramCount, Object... params) {
Method method;
Object requiredObj = null;
Object[] parameters = new Object[paramCount];
Class<?>[] classArray = new Class<?>[paramCount];
for (int i = 0; i < paramCount; i++) {
parameters[i] = params[i];
classArray[i] = params[i].getClass();
}
try {
method = obj.getClass().getDeclaredMethod(methodName, classArray);
method.setAccessible(true);
requiredObj = method.invoke(obj, params);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return requiredObj;
}
Принятые параметры: obj, methodName, количество параметров принятых и параметров. Например,
public class Test {
private String concatString(String a, String b) {
return (a+b);
}
}
Метод concatString может быть вызван как
Test t = new Test();
String str = (String) genericInvokMethod(t, "concatString", 2, "Hello", "Mr.x");