java отражение для создания поля / значения hashmap - PullRequest
10 голосов
/ 29 ноября 2011

Мне нужно создать Hashmap полей / значений, содержащихся в сущности, чтобы я мог использовать их для замены их в строке, содержащей теги с именами полей.

У меня есть этот код:

public static String replaceTags(String message, Map<String, String> tags) ...

, который заменяет все теги, найденные в сообщении , на эквивалентные значения в тегах , но для построения таблицы Map мне нужновозьмите «любую» сущность и сможете создать карту из сущности.Итак, как я мог сделать это возможным?чтобы получить процедуру, в которой я отправляю сущность и получаю в качестве возврата карту со всеми полями и значениями.

public static Map<String, String> getMapFromEntity(Object entity){
    Map<String, String> map = new HashMap<String, String>();

    ...?????

    return map;
}

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

Спасибо.

Ответы [ 3 ]

11 голосов
/ 29 ноября 2011
    Field[] fields = entity.getClass().getFields();
    Map<String, String> map = new HashMap<String, String>();
    for(Field f : fields)
            map.put(f.getName(),(String) f.get(entity));

O, и ваша сущность должна быть объектом вашего класса, а не самого вашего класса.Если ваши поля являются закрытыми, и у вас есть для них геттеры, вы должны использовать getMethods () и проверить, начинается ли имя метода с префикса get.

0 голосов
/ 09 февраля 2019

Если все, что вы хотите получить от этой карты, это почему бы не использовать литературный материал, такой как Джексон, тогда вы можете просто преобразовать его следующим образом Map map = new ObjectMapper().convertValue(object, Map.class);

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

Я знаю, что могу использовать отражение, и это единственный подход, который я нашел, чтобы добиться этого, но есть ли другой способ сделать то же самое?

Насколько язнаете, отражение - единственный способ сделать это, если только класс (ы), для которого вы хотите построить карту, не реализует некоторый интерфейс, и ваш код, извлекающий карту, не знает об этом интерфейсе.

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