# Objektname zur Laufzeit festlegen?



## Franziska2005 (14. Mrz 2005)

Hallo,
ich möchte während der Laufzeit eines Programms den Namen eines Objekts festlegen.

Klassenname  objektname = new Klassenname();

objektname soll per tastatur eingegeben werden. 
ist dies möglich und wenn ja wie? 
Kann man z.B. an der Stelle objektname einen Verweis auf eine Addresse mit dem Objektname benutzen? 

mfg 
Franziska


----------



## Wildcard (14. Mrz 2005)

Man könnte das mit einer Hashmap realisieren.
String einlesen -> als Key für die Hasmap verwenden und als Value neues Objekt erzeugen.


```
map.put("objektname",new FooBar());
```


----------



## Sky (14. Mrz 2005)

Das Thema wurde hier bereits häufiger besprochen. Meine Frage an Dich lautet nun, was bezweckst Du damit??
Der Nutzer sollte von den Namen einer Referenz nichts mitbekommen. Wenn Du einem Objekt einen Namen vergeben möchtest, so solltest Du dieses als  Objekt-Attribut halten.


----------



## Franziska2005 (14. Mrz 2005)

Das Objekt soll in einer Datei gespeichert werden und anhand des Objektnamens bei irgendwann ggf. bei einem Späteren start des Programms geladen werden. Es ist aber unbekannt wieviele Objekte erzeugt werden und es wäre am einfachsten diesen zur Laufzeit diejeweiligen namen zuzuordnen.


----------



## KSG9|sebastian (14. Mrz 2005)

Objekt in ne Datei speichern?
Guck dir mal die Klasse Serializable an..die macht das was du gerne hättest.


----------



## Franziska2005 (14. Mrz 2005)

Das Speichern des Objekts ist nicht das Problem.
Ich möchte während der Laufzeit eine vorher nicht bekannte anzahl von Objekten erstellen.
Ich möchte aber gerne den Objektnamen zur Laufzeit erst festlegen.


----------



## KSG9|sebastian (14. Mrz 2005)

Dann nimm ne Collection und serialisiere die, was willst du da mit dynamischen Objektnamen? Beschreib doch mal dein Problem genauer..! 


```
public void actionPerformed(ActionEvent e){
    Vector v = null;
    try{
     int anzahl = Integer.parseInt(anzahlTextFeld.getText());
     v = new Vector();
     for(int i=0;i<anzahl;i++){
         v.add(new String("Ein ganz tolles Objekt ohne dynamische Namen"));
     }
   }catch(NumberFormatException nfe){
     System.err.println("Eingabe ist keine Zahl");
     nfe.printStackTrace();
   }
}
```

So, ganz tolle viele Objekte, ohne dynamische Namen uns sonst was


----------



## AlArenal (14. Mrz 2005)

Gib der Klasse des Objekts ne Variable String name und implementier getName() und setName(String name). Den kannste jederzeit sezten wie und auslesen wie du lustig bist.

Wenn es unterschioedliche Klassen sind, die das können sollen, die nicht voneinander abgeleitet sind, pack die Methioden in ein eigenes Interface und lasse alle Klassen das Interface implementieren.


----------



## Franziska2005 (14. Mrz 2005)

Ich erkläre es nochmal genauer:

Ich möchte eine Methode schreiben, die mir ein Objekt erzeugt das attribute hat ähnlich einem Benutzerkonto. Dieses objekt soll dann unter Benutzung von Serializable gespeichert werden.
Wenn ich die Methode wieder aufrufe, soll ein weiteres Objekt erzeugt werden, was auch gespeichert werden soll.
Dafür müsste der Objektname des zu speichernden Objekts doch ein anderer sein. Darum nützt mir getname und setname hierbei nichts.


----------



## AlArenal (14. Mrz 2005)

Und was hat das mit dem Namen des Objekts zu tun? Du kannst doch irgendwann sowas machen:


```
serialisiere(new Benutzer(id, name, vorname, rechte));
```

Was soll denn das alles mit den Instanznamen deriner Objekte zu tun haben? Ich vermute du hast da irgendwo noch ein Verständnisproblem. Iss aber net schlimm, aller Anfang ist schwer


----------



## Franziska2005 (14. Mrz 2005)

Mag sein das ich ein Verständnisproblem habe und vielleicht kann mir jemand helfen es zu lösen:

Klassenname benutzerkonto1 = new Klassenname();  

Klassenname benutzerkonto2 = new Klassenname();  usw...

die benuterkonten haben als attribute den namen des benutzers, eine kontonummer, usw.

benutzerkonto1 ist der name meines objektes. benutzerkonto2 der name eines weiteren objekts.
ändere ich etwas an benutzerkonto1 möchte ich mein objekt 
benutzerkonto1 speichern. das speichern soll mit objectouputstream geschehen. hierfür brauche ich den namen meines objekts. 
ich weiss vor programmstart aber nicht wieviele benutzerkonten erstellt werden sollen bzw. welches objekt geändert werden soll. meine objekte müssen also unterschiedliche namen haben, die ich vorher aber nicht festlegen kann.


----------



## Wildcard (14. Mrz 2005)

Variablennamen kannst du zur Laufzeit nicht festlegen. Das sollte auch nie nötig sein, weil das interne Angelegenheiten sind.


			
				Franziska2005 hat gesagt.:
			
		

> benutzerkonto1 ist der name meines objektes. benutzerkonto2 der name eines weiteren objekts.
> ändere ich etwas an benutzerkonto1 möchte ich mein objekt
> benutzerkonto1 speichern. das speichern soll mit objectouputstream geschehen.


Pack alle Objekt in eine Collection und speicher die. 
Wenn du aber unbedingt zur Laufzeit Namen einlesen willst siehe oben:


			
				Wildcard hat gesagt.:
			
		

> Man könnte das mit einer Hashmap realisieren.
> String einlesen -> als Key für die Hasmap verwenden und als Value neues Objekt erzeugen.
> 
> ```
> ...


----------



## Franziska2005 (15. Mrz 2005)

Ich habe es jetzt mit Hashmap wie oben beschrieben gemacht.

Vielen Dank für die Hilfe.

Franziska


----------

