Использование поля на объекте неизвестного типа - PullRequest
0 голосов
/ 20 ноября 2019

Мое приложение создает кэш из Field, к которому будет обращаться позже в течение его жизни. Я подумал, что создание индекса Field будет быстрее, чем выполнять поиск каждый раз, когда мне нужно получить доступ к Field. Однако я не вижу возможности использовать Field для объекта Java.

POJO:

public class Employee {
    private String firstName;

    private String lastName;

    Employee(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }
}

Пример:

public static void main(String[] args) throws IOException {
    Map<String, Field> fields = new HashMap<>();

    for (Field field : Employee.class.getDeclaredFields()) {
        fields.add(field.getName(), field);
    }

    Object employee = new Employee("bob", "saget");

    fields.entrySet().forEach((entry) -> {
        // Showing intent, obviously getFieldValue doesn't exist
        System.out.println("Field " + entry.getKey() + ": " + employee.getClass().getFieldValue(entry.getValue());
    });
}

Ожидаемый результат:

Field firstName: bob
Field lastName: saget

1 Ответ

0 голосов
/ 21 ноября 2019

Я не уверен, почему вы используете отражение, но это даст вам ваш заявленный "Ожидаемый результат"

public class Employee {
    private String firstName;

    private String lastName;

    Employee(String firstName, String lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    public static void main(String[] args) throws IOException {
        Map<String, Field> fields = new HashMap<>();
        for (Field field : Employee.class.getDeclaredFields()) {
            fields.put(field.getName(), field);
        }
        Object employee = new Employee("bob", "saget");
        fields.entrySet().forEach((entry) -> {
            try {
                System.out.println("Field " + entry.getKey() + ": " + entry.getValue().get(employee));
            } catch (IllegalArgumentException | IllegalAccessException e) {
            }
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...