Как определить динамический сеттер и геттер с помощью отражения? - PullRequest
13 голосов
/ 30 декабря 2010

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

Foo f = new Foo();

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

f.setparam1("value");

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

Ответы [ 2 ]

10 голосов
/ 30 декабря 2010

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

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();
}
7 голосов
/ 30 декабря 2010

Apache Commons BeanUtils делает это.

...