Как навести порядок в аргументах в конструкторе [Java] - PullRequest
0 голосов
/ 14 января 2020

Я пишу код, который читает значения из файла props и пытается автоматически создать соответствующий экземпляр POJO.

// Code below will retrieve keys in order they are annotated in class.. this may or may not be same order as they appear in constructor.. (this is my problem)
String[] keys = ReflectionX.getDeclaredMethodsWithPropXFileRWBindByNameAnnotationSorted(c, PropXFileRWBindByName.class);

ArrayList<Object> objectList = new ArrayList<Object>();

    // The code below retrieves String values from file
    // I will repeat the code to retrieve ArrayList<String> values

    for (String key : keys) {



        String value = propsX.getPropValueAsStr(key);
        objectList.add(value);

        Constructor<?>[] constructors = c.getConstructors();

        Object[] objs = objectList.toArray();

        Constructor<?> finalConstructor = null;

        for (Constructor<?> constructor : constructors) {

            if (constructor.isAnnotationPresent(PropsXConstructor.class)) {
                finalConstructor = constructor;
                break;
            }

        }


        if (finalConstructor != null) {

            P record = (P) finalConstructor.newInstance(objs);
            recordList.add(record);

        } 

    }   

Приведенный выше код извлекает «ключ» из любого поля, помеченного @PropXFileRWBindByName, и будет затем получить значение из файла свойств. Затем он пытается создать экземпляр данного объекта, используя newInstance(objs);

. Проблема в том, что я хочу обеспечить порядок аргументов в конструкторе. Другими словами, ключи извлекаются в том же порядке, в котором они появляются в классе. Очевидно, что когда я изначально создал конструктор, порядок аргументов имитировал порядок, в котором они появляются в классе. Но как я могу реализовать это так, чтобы порядок аргументов в конструкторе всегда соответствовал порядку, который я получаю в keys? Другими словами, я хочу обеспечить, чтобы аргументы конструктора всегда появлялись в определенном порядке c (возможно, с помощью аннотаций?), Чтобы при их изменении в среде IDE отображалась ошибка.
В моем конкретном c примере конструктора выглядит примерно так:

constructor(String str1, String str2, String str3, ArrayList<String> arr1, ArrayList<String> arr2, String str4)

Когда я получаю значения из файла, мне нужно знать точный порядок аргументов и генерировать конструктор соответственно.

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

Спасибо!

...