Получение списка частных свойств класса / объекта Java - PullRequest
1 голос
/ 11 ноября 2011

Как получить список всех частных свойств объекта Java, используемых в методах получения и установки. Я пробовал PropertyUtils и MethodUtils, но не повезло. Теперь я пытаюсь использовать getDeclaredFields() объекта Class, который возвращает мне список объектов Field, а затем проверяет, является ли это частным свойством. Или есть ли лучшие решения для этого.

Ответы [ 4 ]

1 голос
/ 11 ноября 2011

Вы можете найти все геттеры и сеттеры и посмотреть, есть ли соответствующее поле.Однако поля могут начинаться с _fieldName или m_fieldName. Вы можете только заключить, что геттеры / сеттеры как-то связаны с полем.

1 голос
/ 11 ноября 2011

То, что вы сказали, или, может быть, yourBean.getClass().getMethods() а затем method.getName().startsWith("get") для каждого возвращаемого метода.

Могу я спросить, зачем вам это нужно?

0 голосов
/ 08 апреля 2015

Это довольно старый вопрос, но я дам здесь ответ для новых поисков.

Используя подход, предложенный здесь @highlycaffeinated: https://stackoverflow.com/a/6796254/776860

Вы можетелегко найти желаемое решение с парой изменений.

Получение списка только имен частных полей

public List<String> getMap(Object o) throws IllegalArgumentException, IllegalAccessException {
    List<String> result = new ArrayList<String>();
    Field[] declaredFields = o.getClass().getDeclaredFields();
    for (Field field : declaredFields) {
        if(!field.isAccessible()) {
            result.add(field.getName());
        }
    }
    return result;
}

Получение карты всех имен полей и их значений

public Map<String, Object> getMap(Object o) throws IllegalArgumentException, IllegalAccessException {
    Map<String, Object> result = new HashMap<String, Object>();
    Field[] declaredFields = o.getClass().getDeclaredFields();
    for (Field field : declaredFields) {
        field.setAccessible(true);
        result.put(field.getName(), field.get(o));
        } 
    }
    return result;
}

Точно так же, как @highlycaffeinated, предоставляемый только с дополнительной строкой field.setAccessible(true);, которая позволяет также анализировать private полей.

0 голосов
/ 11 ноября 2011

Я делаю это:

private Set<String> getModelProperties(Class<T> cls) {
    Set<String> properties = new HashSet<String>();
    for (Method method : cls.getDeclaredMethods()) {
        String methodName = method.getName();
        if (methodName.startsWith("set")) {
            properties.add(Character.toLowerCase(
              methodName.charAt(0)) + methodName.substring(3));
        }
    }

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