# Dynamisch Attribute hinzufügen



## A_Christoph (31. Mai 2004)

Hallo, ich habe ein pzinzipielles Problem im Zusammenhang mit Attributen, vielleicht kann mir jemand helfen

Ich habe eine Klasse, in der bereits bestimmte Attribute mit ihren Datentyp vorhanden sind. Nun lege ich davon ein Objekt an und gebe dem Benutzer über eine Oberfläche die Möglichkeit, hierbei die Attribute mit Werten zu füllen. Nun will ich aber, dass der Benutzer noch einen Button "define Attributes" zur Verfügung hat, mit dem er noch weitere Attribute mit ihren Datentypen definieren kann. Wie kann ich dies nun effizient implementieren/abspeichern? Ein weiteres Problem dabei ist, dass diese neuen Attribute für alle weiteren Objekte ebenfalls gelten muss, die ich von dieser Klasse aus erzeuge bzw. bereits irgendwann mal erzeugt habe. Hat da jemand eine Idee? Es hilft mir auch weiter, wenn mir jemand nur einen Gedankenanstoss oder Ähnliches geben kann, denn ich komm im Moment auf keinen vernünftigen Zweig.


Danke im Voraus für Eure Tipps

Grüße Christoph


----------



## Roar (31. Mai 2004)

also "echte" Felder den Klassen hinzuzufügen geht natürlich nicht. Eine Möglichkeit die mir gerade eingefallen ist ist eine private statische Klassenvariable vom typ Hashtable. In der kannst du ein Key und Value speichern. Du musst allerdings entsprechende Methoden zu deiner klasse hinzufügen die dir felder ausgibt und einfügt etc.
Da deine Hashtable statisch ist gilt sie für alle Instanzen des objekts.

z.B. so:


```
class DynamicFields {

private static Hashtable fields = new Hashtable();

public DynamicFields() {
}

public addField(Object name) {
     addField(name, null);
}

public addField(Object name, Object value) {
     fields.put(name, value);
}

public Object getField(Object name) {
     fields.get(name);
}
}
```

das is jetz nur spo dahingekrakelt. du könntest auch theoretisch ein eigenes objekt ala Hashtable bauen das aber 3 oder mehr werte aufnehmen kann und z.B. noch den klassentyp speichert.


----------



## A_Christoph (31. Mai 2004)

Zunächst mal danke für den schnellen Post,

wenn ich deine Idee richtig verstehe, so haben nun hierbei alle Objekte die gleichen Attributnamen, aber auch die gleichen Werte. Das soll aber nicht passieren. Denn ich will zwar dass alle Objekte, die hierbei angelegt werden, die selben Attribute haben (Bsp. Hausnummer), aber andere Werte klarerweise. Dies ist aber mit deiner Idee nicht vereinbar wenn ich dich richtig verstehe oder?

Danke für deine Hilfe ,
Grüße Christoph


----------



## Roar (31. Mai 2004)

hm? moment das versteh ich jetzt nicht. du kannst z.B. die klasso so nutzen:


```
DynamicFields df1 = new DynamicFields(),
df1.addField("Hausnummer", new Integer(123)));
DynamicFields df2 = new DynamicFields();
System.out.println(df2.getField("Hausnummer"));
// Ausgabe:
// 123
```

also das geht auch mit mehrere objekten dieser klasse, oder wie meinst du das?


----------

