OOP Zugriff auf mit Objekt erstellte Struktur

w4nted

Mitglied
Hallo,

ich denke hier kann mir bei meinem Problem gut geholfen werden. 🙂

Ich möchte ein Objekt vom Typ Verzeichnis anlegen und mit diesem eine Datenstruktur, in der andere Objekte gespeichert werden.
Jedoch funktioniert dann der Zugriff auf die Datenstruktur nicht:

Java:
package verwaltung;

import java.util.Map;
import java.util.TreeMap;

public class Verzeichnis {

	public Verzeichnis(){
		Map<Integer, Person> datenstruktur = new TreeMap<>();
	}
	
	public void add(Person x){
		this.daten.put(x);
	}
}

Der Zugriff über die Methode add() funktioniert nicht.

Wäre nett, wenn mir jemand helfen würde. 🙂
 
Du willst in der add() Methode auf this.daten zugreifen, das gibt es aber nicht. Außerdem erwartet put() zwei Argumente. Ein Schlüssel ("Key") und einen diesem Key zuzuordnenden Wert ("Value"). Am besten nochmal die JavaDoc zur Map befragen.
 
Hallo.
'datenstruktur' wird NUR im Konstruktor erzeugt, aber am Ende des Konstruktors 'verfällt' es sozusagen wieder.
Von daher geht dann 'this.datenstruktur' (ich nehmen an hier hast du dich verschrieben und meintest anstelle von 'daten' eher 'datenstruktur') auch fehl.
Du musst eine Klassenvariable 'datenstruktur' anlegen, die ist dann innerhalb der Klasse existent und über 'this' erreichbar.
(Und es fehlt wie MR_UNIX schon aufzeigte ein Key bei der put-Methode)
 
Zuletzt bearbeitet:
Äh ups. Sorry das war jetzt mein Fehler.

Wenn ich das dann aber so wie Du beschrieben hast verändere, funktioniert es dennoch nicht:

Java:
package verwaltung;
 
import java.util.Map;
import java.util.TreeMap;
 
public class Verzeichnis {
 
    public Verzeichnis(){
        Map<Integer, Person> datenstruktur = new TreeMap<>();
    }
    
    public void add(int key, Person x){
        this.datenstruktur.put(key, x);
    }
}


Den Key kann man ja einfach übergeben.
 
Jetzt ist noch das Problem, dass deine 'datenstruktur' eine lokale Variable im Konstruktor und keine gekapseltes Attribut ist. Du musst sie über den Konstruktor schreiben. Bzw. zumindest außerhalb des Konstruktors. Sonst existiert sie nur innerhalb von ihm.
Ist mir eben gar nicht aufgefallen.
 
Hi,

danke für die schnellen Antworten.

Aber das bedeutet doch dann, dass ich nicht für jedes Objekt vom Typ Verzeichnis eine extra Struktur anlegen kann, oder?

Wenn ich die beiden Objekte

Code:
Verzeichnis verz = new Verzeichnis;

Code:
Verzeichnis directory = new Verzeichnis;

anlege, dann benutzen beide dieselbe Struktur?
 
Zuletzt bearbeitet:
Okay, jetzt habe ich es. Dankeschön!

Ich werde mich wirklich noch mit der Objektorientierung intensiver auseinandersetzen müssen.

Ich habe nur vergessen, dass ich auch normale Variablen immer vor dem Konstruktor definiere. Daran habe ich beim Erstellen der Map aber nicht gedacht.
 

Zurück
Oben