Я пишу код, который читает значения из файла 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
?
Спасибо!