Я пишу пользовательский API, используя Reflection
для сохранения объектов в файл. У меня следующая структура классов:
@Constructor
public XYZPOJO(@Key(key = "word") String word, @Key(key = "variations") ArrayList<String> varList) {
this.word = word;
this.varList = varList;
}
String word;
ArrayList<String> varList = new ArrayList<String>();
@Key(key = "word")
public String getWord() {
return word;
}
@Key(key = "variations")
public ArrayList<String> getVarList() {
return varList;
}
При сохранении объекта в файл моя программа извлекает каждый метод, помеченный @Key
, вызывает метод и сохраняет вызванное значение в файл, используя значение @Key
в качестве Имя свойства. Позже, когда я захочу создать экземпляр Object, он будет искать конструктор, отмеченный @Constructor
, а затем извлечет значение @Key
каждого параметра в конструкторе и получит значение ключа (свойства) из файла.
Моя основная проблема заключается в том, что для каждого поля, которое я хочу сохранить, мне нужно продублировать аннотацию @Key
(и значение) перед каждым методом и перед соответствующим параметром в конструкторе. Более того, если обе аннотации конструктора / метода не совпадают точно, это не приведет к созданию экземпляра Object. Очень легко случайно скопировать неправильные значения.
Есть ли способ определить каждый @Key
только один раз?
Я думал добавить @Key
только один раз перед каждым полем I wi sh для сохранения, однако я верю (пожалуйста, исправьте меня, если я ошибаюсь), что я больше не смогу создавать экземпляр класса с помощью конструктора (я считаю, что мне нужно было бы создать экземпляр класса путем непосредственной установки значения каждого поля с помощью отражения, тем самым обходя конструктор, правильно?). Однако это не идеально, так как конструктор выполняет определенные необходимые функции до создания экземпляра класса.
Какие еще существуют решения?
Спасибо!