Java. Выбор поля объекта по строке

110
20 ноября 2021, 12:20

Есть запрос с параметром. Формат запроса:

get field1 for field2 = "value1"

Где:

  • field1 - одно из полей: ip, user, date, event или status;
  • field2 - одно из полей: ip, user, date, event или status;
  • value1 - значение поля field2.

Примеры запросов с параметром:

  1. get ip for user = "Vasya"
  2. get user for event = "DONE_TASK"
  3. get event for date = "03.01.2014 03:45:23"

Есть класс

class LogObject {
    String ip = "";
    String user = "";
    Date date = null;
    Event event = null;
    Integer eventTask = null;
    Status status = null;
    public LogObject() {
    }
}

Есть парсер запроса:

public Map<String, String> getFieldsFromQL(String ql) {
    Map<String, String> map = new HashMap<>();
    Matcher m = Pattern.compile(
        "get (?<field1>\\w+) for (?<field2>\\w+) = \"(?<value1>.*?)\"")
        .matcher(ql);
    if (m.find()) {
        map.put("get", m.group("field1"));
        map.put("for", m.group("field2"));
        map.put("value", m.group("value1"));
    }
    return map;
}

Как мне реализовать сбор данных по запросу?

public Set<Object> executeQLWithParam(String ql) {
    Set<Object> set = new HashSet<>();
    ??????????????????????
    return set;   
}

Не получается догнать, как обратиться к полю, например, "new LogObject.ip" по String = "ip"

Answer 1

Вижу два способа:

рефлексия. почитайте статью здесь

Class c = Class.forName("Class");  
Field field = c.getField("field");

или через оператор switch

switch(name) {
    case "field1":
        object.field1;
        // todo
        break;
}
READ ALSO
Запрос MYSQL где два поля одновременно должны быть равны числу

Запрос MYSQL где два поля одновременно должны быть равны числу

Имеется база с полями id, sdel, podtv Нужно вывести поля где и sdel!=1 и podtv!=1Если я пишу запрос через AND

77
AUTO_INCREMENT и SEQUENCE в разных SQL диалектах

AUTO_INCREMENT и SEQUENCE в разных SQL диалектах

Почему, например, в Oracle SQL нет понятия AUTO_INCREMENT?

164
Что такое # перед селектором в CSS?

Что такое # перед селектором в CSS?

Что такое # перед селектором в CSS? Чем он отличается оти как это называется, чтоб я смог статейки поискать

92
Зачем Pixel perfect верстка

Зачем Pixel perfect верстка

Зачем писать макет pixel perfect? Я так понимаю для этого используется Position: relative И отрицательные marginЭто же от одной до трех лишних строк иногда...

223