# Erzeugen von Objekten aus einer Methode



## Gast (26. Apr 2006)

Hallo,

hab nur eine kurze Frage.

Wie kann ich mit einer Methode mehrere Objekte mit verschiedenen Namen erzeugen, ohne das ich den Namen explizit
als Parameter übergebe ?

Stelle mir das in etwa so vor:

```
public class methode(){

            class name = new class(); 
            return class;}
```
Hier würde ich gerne verschiedene Objekte der Klasse class erzeugen, aber mit verschiedenen Namen, die zufällig generiert werden.

Geht das überhaupt und schon mal vielen Dank im voraus.


----------



## Murray (26. Apr 2006)

*name* ist doch nur der Bezeichner einer lokalen Variable und als solcher auch nur innerhalb dieser Methode bekannt. Das Objekt selbst weiß nichts von diesem Namen. Insofern sehe ich nicht, warum man diesen Namen zur Laufzeit zufällig erzeugen sollte.


----------



## Guest (26. Apr 2006)

Oh stimmt mein Fehler, habe ich übersehen.
Aber wie kann ich aus einer Methode heraus ein globales Objekt erzeugen, das auch nach Beendigung der Methode noch existiert und dann eben einen zufälligen Namen hat ?


----------



## Leroy42 (26. Apr 2006)

*Jedes* erzeugt Objekt ist in der Hinsicht global, daß es das Methodenende überlebt,
sofern auf ihn _irgendeine_ Referenz(also dein _Name_) verweist. Vielleicht
mußt du dich etwas von Objekten in der Sprache C++ lösen  :wink: 

Da deine Methode ja eine Klasse liefert kannst du sie in der aufgerufenen Methode
ja zuweisen.

```
public MeineKlasse machMichEineInstanz() {
  return new MeineKlasse();
}

public void erzeugen() {
  MeineKlasse erna = machMichEineInstanz();
  MeineKlasse hugo = machMichEineInstanz();
  ... // irgendetwas mit erna und hugo machen
}
```


----------



## Murray (26. Apr 2006)

Ein Objekt hat doch erstmal keinen Namen (es sei denn, in der Klasse gäbe es ein entsprechendes Attribut, aber darum geht es hier ja wohl nicht). Mit dem Namen meinst Du also wohl den Namen einer Variablen, in der die Referenz auf ein Objekt gespeichert ist.

Du kannst natürlich in einer Methode ein Objekt erzeugen und dies einer nicht-lokalen Variablen zuweisen. Dazu muss diese Variable aber in der Klasse deklariert sein (und somit auch einen Namen haben).

Ich verstehe aber imemr noch nicht, worauf Du hinauswillst  ???:L


----------



## Leroy42 (26. Apr 2006)

Anonymous hat gesagt.:
			
		

> ...und dann eben einen zufälligen Namen hat ?


 :shock: 
Objekte _haben keinen_ Namen. Wie willst du den einen
zufällig generierten Namen in deinem Code später _ansprechen_?

Erklär' doch einfach was du vorhast.


----------



## Guest (26. Apr 2006)

Danke schon mal für die Hilfe.

Aber zum Hintergrund, ich plane eine kleine Simulation, Neds selber zu implementieren.
Da laufen dann kleine Neds auf verschiedenen Feldern umher und falls zwei auf einem Feld sind, vermehren sie sich,
deswegen möchte ich ja mit einer Methode Objekte erstellen.
Aber wie könnte ich jetzt meine Nachkommen zufällig benennen ?


----------



## Leroy42 (26. Apr 2006)

Gar nicht; und zwar aus Gründen, die wir dir geschildert haben. Du brauchst dafür
eine dynamische Datenstruktur:


```
class Nerd {
  String name;
  int alter,
  //... wasWeißIch noch
  Nerd[] nachkommen = new Nerd[20];
}
```
oder, falls du vorher nicht weißt wie heftig deine Nerds am Rammeln sind   

```
import java.util.*;

class Nerd {
  String name;
  int alter,
  //... wasWeißIch noch
  List<Nerd> nachkommen = new ArrayList<Nerd>();
}
```

Falls du nicht mit Java 1.5 arbeitest/arbeiten kannst, laß einfach jeweils *<Nerd>* weg.


----------



## bygones (26. Apr 2006)

die frage ist, muss ein Nerd überhaupt seine Nachkommen kennen ?

wenn sich zwei treffen kommen eben mehr zum Vorschein.... nur wenn du danach den Verwandtschaftsbaum aufzeigen willst bzw. den größten Stecher im Spiel ermitteln willst, musst du die Aktion speichern....


----------

