Могу ли я изменить членов класса, используя API отражения Java? - PullRequest
0 голосов
/ 30 марта 2012

Можно ли изменить какие-либо свойства (класса, метода или чего-либо еще) используя какие-либо Java-отражения?

Ответы [ 2 ]

3 голосов
/ 30 марта 2012

Да. Вы даже можете редактировать приватные члены, используя отражение. Некоторые библиотеки и фреймворки (например, Hibernate и Wicket ) делают это. Однако я бы не советовал делать это самостоятельно, если только у вас нет веских причин.

import java.lang.reflect.Field;

class Something {
    private String name = "Hello";

    public void printName() {
        System.out.println(name);
    }
}

public class Example {
    public static void main(String[] args) throws Exception {
        Something s = new Something();
        s.printName();

        Field field = s.getClass().getDeclaredField("name");
        field.setAccessible(true);
        field.set(s, "Goodbye");

        s.printName();
    }
}
2 голосов
/ 30 марта 2012

Взгляните на BeanUtils, который позволит вам сделать это, не работая напрямую с отражением. Намного проще и менее многословно http://commons.apache.org/beanutils/

Еще немного документации с примерами: http://commons.apache.org/beanutils/v1.8.3/apidocs/org/apache/commons/beanutils/package-summary.html#package_description

Если вы действительно не хотите испачкать руки отражением, я бы порекомендовал работать со слоем абстракции, таким как BeanUtils.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...