Ist es möglich, das folgende Problem mit eingebautem Java-API zu lösen? (Ich möchte den strengen privaten Zugang zu halten, wie gezeigt)Java Extrahierung initialisieren private Felder einer Klasse aus
- Ich habe n Subklassen einer abstrakten Klasse Basemodel.
- erklären Jede dieser Unterklassen ihre eigene Reihe von privaten String Feldern aus.
Innerhalb der Unterklasse Konstruktor möchte ich die privaten Felder aus einer Map Reflection mit Hilfe von Java einzustellen. Ein Beispiel für diese Funktion:
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); } }
Ist es möglich, die Funktion, die ich beschrieben habe in 3), so dass ich den Algorithmus neu zu schreiben, nicht zu extrahieren habe in allen Konstrukteuren der Unterklassen?
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: Aufgrund der Ähnlichkeiten zwischen den Sprachen, ich bin nicht überzeugt, dass dies ein Problem in nur Java aufgetreten ist, und es ist plausibel, dass die Lösung weniger in Java und mehr in der Logik liegen mag ... ich könnte mich irren. – abstractx1
Mögliche doppelte: http://stackoverflow.com/questions/16428817/convert-a-mapstring-string-to-a-pojo –
@RC: Vielen Dank, aber ich wünsche API eingebaute Java verwenden. Ich habe meine Frage aktualisiert. – abstractx1