Как определить динамический сеттер и геттер с использованием отражения?

У меня есть список строк, имена полей, класса в цикле из набора ресурсов. Я создаю объект, а затем используя цикл, я хочу установить значения для этого объекта. Например, для объекта

Foo f = new Foo();

с параметром param1, у меня есть строка "param1", и я как-то хочу конкретизировать "set" с ней как "set" + "param1", а затем применить ее к f instance как:

f.setparam1("value");

и то же для getter. Я знаю, что размышление поможет, но я не мог этого сделать. Пожалуйста помоги. Спасибо!

Ответ 1

Вы можете сделать что-то вроде этого. Вы можете сделать этот код более универсальным, чтобы использовать его для циклических операций с полями:

Class aClass = f.getClass();
Class[] paramTypes = new Class[1];
paramTypes[0] = String.class; // get the actual param type

String methodName = "set" + fieldName; // fieldName String
Method m = null;
try {
    m = aClass.getMethod(methodName, paramTypes);
} catch (NoSuchMethodException nsme) {
    nsme.printStackTrace();
}

try {
    String result = (String) m.invoke(f, fieldValue); // field value
    System.out.println(result);
} catch (IllegalAccessException iae) {
    iae.printStackTrace();
} catch (InvocationTargetException ite) {
    ite.printStackTrace();
}