Доступ к значению атрибута объекта с помощью выражения - PullRequest
2 голосов
/ 27 апреля 2009

Рассмотрим следующий код:

Class Demo
{
    Person person = new Person("foo"); // assume Person class has a 'name' field.

    //Now, how do I get the value of a field, using some expression.
    String expression = "person.name";
}

Теперь я хочу оценить выражение, чтобы получить значение атрибута name. Кто-нибудь может подсказать, как это можно сделать?

- Обновлено: строка 'expression' Я получу ее из файла XML. Так можно ли будет использовать «Отражение» и в этом сценарии? строка 'expression' может также входить в более глубокие уровни, например 'person.birthday.date'.

Ответы [ 11 ]

0 голосов
/ 27 апреля 2009

Если вы не хотите простой маршрут String expression = person.name; (без кавычек вокруг person.name), вам нужно отражение .

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

Редактировать: Этот код может помочь:

public static Object getValue(Object obj, String path)
        throws NoSuchFieldException,
               IllegalArgumentException,
               IllegalAccessException {

    Object currentObj = obj;

    while (true) {
        int indexOfDot = path.indexOf('.');
        boolean lastIter = indexOfDot < 0;

        String fieldName = lastIter ? path : path.substring(0, indexOfDot);

        Field f = currentObj.getClass().getDeclaredField(fieldName);
        f.setAccessible(true);
        currentObj = f.get(currentObj);

        if (lastIter)
            return currentObj;

        path = path.substring(indexOfDot + 1);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...