Wie zur Laufzeit ganz neue Objekte erzeugen?

Freestila

Neues Mitglied
Hallo zusammen.

Ich habe eine Frage. Ich möchte in einem Java-Programm verschiedene Berechnungen anstellen. DIe Grunddaten kommen dabei aus einer Datenbank mittels Hibernate. Das Problem ist, dass die Software neue Datentabellen aufnehmen soll. Ich muss also die Berechnungsmodelle um weitere Datenobjekte ergänzen können, ohne den Sourcecode vom Porgramm zu ändern. Ich müsste dabei also Objekte und Verknüpfungen - sprich Objektattribute - zur Lafuzeit ändern. Das Objekt muss z.B. wissen, dass es eine Liste "idTabelleB" hat, wo die Keys einer verknüpften Tabelle enthalten sind.

Kann ich zur Laufzeit einem Objekt neue Attribute geben? Oder muss ich mir da einen anderen Weg suchen?
 
Wenn ich das richtig verstehe, wäre es wohl am einfachsten, wenn du die nötigen Infos einfach in eine HashMap schreibst.

Java:
public class ...{

private final Map<String,String> myAttributes = new HashMap<String,String>();
...
public void addAttribute(final String name, final String attrib){
   myAttributes.put(name, attrib);
}
public String getAttribute(final String name){
   return myAttributes.get(name);
}

}

Eventuell noch deine Datentypen der Attribute anpassen.
 
Hallo.

Die hashmap nützt mir glaub ich nichts. Mit Attributen meinte ich folgendes:

Ich habe z.B. eine Klasse "Bücher":
Java:
public class Buecher{

private long ID;
private String Titel;

public String getTitel(){return Titel}
public long getID(){return ID}

Diese lege ich jetzt an. Wenn das Programm läuft kommt dann der zeitpunkt, wo ich eine neue Klasse z.B. für Comics brauche. Also müsste ich eine neue Klasse Comics erstelllen, um weiter mit Hibernate zu arbeiten:
Java:
public class Comic{

private long ID;
private String Comicreihe;
und natürlich getter / setter und anderer code.
Ich müsste also eine neue klasse schreiben und in mein Java-Programm einfügen. Ist so etwas möglich? Die xml-mappingdatei kann ich ja einfach neu schreiben, aber ein Teil des Java-Programms ändern? In Java?
 
Anderer Weg. Versuch lieber deine Datenbank und dein Programm so allgemein zu gestalten, dass z.B. Bücher und Comics sich Eigenschaften teilen, man jedoch rausfinden kann, ob es nun nen Comic ist oder nen Buch.
 
Anderer Weg. Versuch lieber deine Datenbank und dein Programm so allgemein zu gestalten, dass z.B. Bücher und Comics sich Eigenschaften teilen, man jedoch rausfinden kann, ob es nun nen Comic ist oder nen Buch.

Sehe ich genauso.
Erstelle zum Beispiel eine Tabelle Schriftstueck und eine Tabelle SchriftstueckTyp wie hier gezeigt und verknüpfe diese per ForeignKey. Dann kannst du jedem Schriftstueck einen SchriftstueckTyp (z.B. Buch, Comic oder ähnliches) zuweisen.



Dann musst du keinen Quellcode ändern, welcher deine Datenstruktur betrifft.
Einfach nur ein SQL Select... join ... Statement benutzen und gut ists
 

Neue Themen


Zurück
Oben