Возможно ли решить следующую проблему с помощью встроенного Java API? (Я хочу, чтобы сохранить строгий частный доступ, как показано)Выделение Java Инициализация частных полей класса
- У меня есть п подклассов абстрактного класса BaseModel.
- Каждый из этих подклассов объявляет собственный набор частных строковых полей.
Внутри конструктора подкласса я хочу установить частные поля с карты с использованием Java Reflection. Примером этой функции:
void setPrivateFields(Map<String, String> fieldsValuesMap) throws NoSuchFieldException, IllegalAccessException { for (Map.Entry<String, String> entry : fieldsValuesMap.entrySet()) { String fieldName = entry.getKey(); String fieldValue = entry.getValue(); Field field = this.getClass().getDeclaredField(fieldName); field.set(this, fieldValue); } }
Можно ли извлечь из функции я описал в 3), что я не придется переписать алгоритм во всех конструкторах подклассов?
class BaseModel {} class Project extends BaseModel { private String name; private String type; public Project(Map<String, String> fieldsValuesMap) { setPrivateFields(fieldsValuesMap); } } class Task extends BaseModel { private String description; private String rawDescription; public Task(Map<String, String> fieldsValuesMap) { setPrivateFields(fieldsValuesMap); } } class SubTask extends BaseModel { ... } ...
@jaggedSpire: Из-за сходства между языками, я не уверен, что это проблема встречается только в Java, и вполне вероятно, что решение может лежать меньше в Java, и больше в логике ... Возможно, я ошибаюсь. – abstractx1
Возможный дубликат: http://stackoverflow.com/questions/16428817/convert-a-mapstring-string-to-a-pojo –
@RC: Спасибо, однако, я хочу использовать встроенный Java API. Я обновил свой вопрос. – abstractx1