Klassen Auf eine Hashtable aus mehreren Klassen zugreifen

helene90

Mitglied
Hallo zusammen

ich habe folgendes Problem. Mein Projekt beinhaltet drei Klassen, Klasse A, B und C. Die Klassen A und B erweitern die gleiche Klasse. Man kann sich das so vorstellen, dass die beiden Klassen „Personen“ sind mit unterschiedlichen Methoden. Klasse C ist eine Informationsdatei auf die A und B Zugriff haben sollen. Klasse A soll andere Objekte/“Personen“ scannen und in C schreiben. Jedes Mal wenn eine neue Person gescannt wird, wird ein neues C erstellt wo dann der Name, Koordinaten(x, y) und diverser anderer Eigenschaften des Objekts gespeichert wird. Die verschiedenen C‘s werden wieder in einer wie folgt Hashtable<String C> xy = new Hashtable<String, C>(); gespeichert. Das klappt alles wunderbar, ich kann dann mit der xy.get(„Name“) die gewünschten Infos lesen. Jetzt möchte ich aber das Lesen in der Klasse B machen. Das heißt, ich möchte auf die von A erstellte Hashtable xy zugreifen und mir z. B die Koordinaten des gewünschten Objekts geben lassen. Leider klappt das nicht bei mir. Alle Klassen sind public, sowie die variable xy von A.

Ich hoffe jemand hat eine Lösung oder Idee. Ich bin langsam verzweifelt.

Liebe Grüße
 
Hi,
So ohne Code dein Problem zu verstehen ist ein wenig schwierig für uns. Das gleich gilt auch, dass das was du beschreibst, nicht unbedingt so codiert ist, wie du es gerne möchtest... also poste doch mal deine 3 Klassen A, B und C.
 
Code wäre hier ganz gut. Ansonsten würde ich folgendes Raten:
Die Klassen sind auf die HashTable angewiesen, darum würde ich diese als Konstruktorparameter voraus setzen und diese bekommen den HashTable einfach von beginn an. Dabei musst du dich eben drum kümmern, dass du auch die Instanz entsprechend weitergeben kannst.

Eine komfortablere, aber auch fortgeschrittenere Variante wäre das ganze mittels DI (z.B.: Guice) zu lösen.

Aber wie knilch schon gesagt hat: Poste doch einfach mal die Klassen, dann kann man sicher mehr dazu sagen.
 
Vielen Dank für eure antworten. So in etwa sollte das aussehen. Ich habe nicht den ganzen Code(abstrakt) geschrieben, lediglich nur das wesentliche. Es geht nur darum wie ich die erstellte Hashtable „bestand“ in der Klasse Abholung aufrufen kann um dort mit Artikeln zu arbeiten. Ich hoffe ihr könnt verstehen was ich meine.

Ich bedanke mich schon mal im Voraus.

LG

Java:
public class Buchung extends HauptGruppe {
Hashtable<String, DatenBank> bestand = new Hashtable<String, DatenBank>();
DatenBank artikel = new DatenBank();
String artikelName1, artikelName2, artikelName3;

public void scan(){
bestand.put(artikelName1, artikel);
bestand.put(artikelName2, artikel);
bestand.put(artikelName3, artikel);
}

public Hashtable getBestand(){  // geht das?
return this.bestand;   // Liste beschrieben
}
}

public class DatenBank {
String name;
boolean verfügbar;
double X_position;
double Y_position;
//es folgen get und set Methoden………….
}

public class Abhollung extends HauptGruppe{
//hier möchte ich die selbe Hashtable „bestand“ aus Klasse Buchung aufrufen. So ging das nicht:
Buchung bsp = new Buchung();
bsp.getBestand;  // Liste leer
}
 
Zuletzt bearbeitet von einem Moderator:
Das ist doch ein simples Eingabe-Sicherung-Ausgabe-Problem, lösbar durch z.B. JDBC. Auch wenn nicht per JDBC gelöst, so muss die Datenbank (Sicherung; hier ein HashTable) definitiv von Ein- und Ausgabe getrennt sein und Ein- sowie Ausgabe über die Existenz der Datenbank bescheid wissen. Bei dir aber ist die Datenbank ausschließlich in der Eingabe (Buchung) zu finden.
 
So ganz anderes Thema. Warum verwendest du die Klasse Hashtable? Weißt du das die schon seit Java 4 oder 5 obsolet ist und man sollte HashMap (oder die synchronisierte Version Collections.synchronizedMap(new HashMap<...>())) verwenden.
 
Hallo helene90,
irgendwo muss eine public static void main(...){} sein, die direkt oder indirekt scan(){...} aufruft, damit
in der Collection bestand was drin ist.
Gruß,
tsitra
 
Ja die scan() Methode wird in main class aufgerufen. Das ganze basiert auf einem fertigen GUI. Ich kann diverse Methoden aus dem fertigen Package verwenden. Es gibt sende und empfange Methoden die Kommunikation ermöglichen. Ich habe es jetzt soweit gelöst, in der
Java:
Buchung class{
scan( scanedEvent e) {
sendMessage(bestand.get(e.getName()));
}}
und in der
Java:
Abhollung calss{
public Hashtable<String, DatenBank> bestand_ = new Hashtable<String, DatenBank>();
public DatenBank artikel_ = new DatenBank();
reseiveMessage ( mesageEvent e){
artikel_ = (DatenBank) e.getMessage();
String artikelName = artikel_.getName;
bestand_.put(artikelName, artikel_);
}}
Ich bin mir nicht sicher ob das so wirklich notwendig. Ich erstelle praktisch zwei Mal das gleiche in beiden Klassen. ich dachte es wäre möglich einen direkt Zugriff auf den bestand aus klasse Buchung. Es ist ja auch möglich auf die variablen über das get zuzugreifen. Sprich eine Kopie von bestand Erstellen.
Mir ist durchaus bewusst dass mein Problem für die meisten Java Kenner oder im Allgemeinen objektorientierten Programmiersprache, recht simpel ist. Für mich ist es alles recht neu, daher möchte ich mich entschuldigen für meine Unwissenheit(nicht sarkastisch gemeint 😉).
Wenn ich HashMap nutze, würde ich mein Problem nicht umgehen außer dass es eleganter wäre?

Danke nochmals
 
Wie gesagt:
Erstelle die Datenbank (bei dir die HashMap bzw. -Table) und übergib diese sowohl der Eingabe (Buchung) als auch der Ausgabe (Abholung) im Konstruktor oder per Setter.
 

Zurück
Oben