Отражение Java - список свойств (получателей и установщиков) класса - PullRequest
2 голосов
/ 23 июля 2011
public class foo
{
    private String _name;
    private String _bar;

    public String getName() {
        return _name;
    }

    public void setName(String name) {
        _name = name;
    }

    public String getBar() {
        return _bar;
    }

    public void setBarn(String bar) {
        _bar = bar;
    }
}

Если у меня есть вышеуказанный класс, могу ли я использовать отражение, чтобы перечислить свойства, определенные геттерами и сеттерами? Я попробовал метод ниже, но он не работает, Field[] fields оставлено пустым. Я знаю, что могу сделать это в .Net, но Java - это совсем другое животное. Я вообще лаю не на том дереве?

private HashMap<String, String> getHashMap(Object obj) {
    HashMap<String, String> map = new HashMap<String, String>();

    Class<?> cls = obj.getClass();

    Field fields[] = cls.getFields();
    for(Field f : fields) {
        String name = f.getName();
        String value = f.get(obj).toString();
        map.put(name, value);
    }
    return map;
}

Также сеттеры и геттеры могут быть злыми, я должен просто отбросить это?

Ответы [ 3 ]

3 голосов
/ 23 июля 2011

Используйте класс Introspector .Получите BeanInfo и используйте метод getPropertyDescriptors () .Это должно помочь вам.

3 голосов
/ 23 июля 2011

Может быть, вместо этого использовать cls.getDeclaredFields?(И f.setAccessible(true) перед тем как получить приватное поле).

Если вы хотите получить и установить, вы должны получить метод по getDeclaredMethods.Затем я предлагаю использовать BeanUtils вместо написания собственной логики отражения :) (ИМХО менее удобным является java.beans.Introspector ).

1 голос
/ 23 июля 2011

Вы можете сделать что-то вроде этого:

List<Method> methods = Arrays.asList(getClass().getDeclaredMethods());
for (Method m : methods)
{
    String name = m.getName();
    if (name.startsWith("get") || name.startsWith("is"))
    {
        // Do something with the getter method
    } else if (name.startsWith("set"))
    {
        // Do something with the setter method
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...