ich habe folgendes Problem:
Ich verwende eine Java-Methode die als Argument einen String erwartet. Über eine andere Java-Methode kann dann dieser String wieder abgefragt werden.
Anstelle des String würde ich aber gerne mehre Informationen übergeben z.B. auch ein Objekt.
Ich suche deshalb einen Weg eine eigene String-Klasse zu schreiben, die mir es auch erlaubt ein Objekt aufzunehmen. D.h. nach außen soll die Klasse wie String reagieren hat aber zusätzlich eine Möglichkeit ein Objekt zu transportieren und natürlich Zugriffsmethoden auf dieses Objekt.
da die Klasse String final ist, kannst du sie nicht ableiten.
Du hast ja eine Methode, die einen String erwartet, darum kannst du nicht einfach eine eigene Klasse schreiben, da diese kein Subtyp von String sein darf.
Eine einfache lösung wäre:
class XXX {
private String s;
private Object o;
Und wie übergebe ich nun diese Klasse an meine Methode. Das Problem ist doch, dass die Methode einen String erwartet. Ich kann doch nicht einfach die Klasse XXX auf String casten "(String)XXX; " ???
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Problem ist doch, dass die Methode einen String erwartet. Ich
kann doch nicht einfach die Klasse XXX auf String casten
"(String)XXX; " ???
Wenn deine Methode einen String erwartet, kannst du
auch nur einen String uebergeben, soviel ist klar.
Das sieht dann aber so aus.
myMethod(validObjXXX.getString());
Somit hast du deine zusaetzlichen Informationen natuerlich
nicht. Also muesstest du eventuell an deiner Methode schrauben,
sodass sie z.B. ein XXX Object verarbeiten kann.
Anstelle des String würde ich aber gerne mehre Informationen
übergeben z.B. auch ein Objekt.
Du kannst dir einen look-up basteln:
Du stopf jeden String zusammen mit der passenden Information/Object in eine Hashtable. Wenn zu dem String die Informationen/Objecte wieder gebraucht werden holst du sie aus der Hashtable wieder raus.
Die Standart-Objecte, die nur String-Objecte erfahrten, sehen nur die Strings. Deine Programmteile könenn über die Hashtable aber jederzeit an die restlichen Informationen ran.
(Warnung: Hashtable vergleicht auf .equals-Basis. für ==-Tablen gibt andere Klassen)
du willst die neue Klasse an die Methode übergeben,
du willst die Hashtable an die Methode übergeben…
so ist das immer nicht gedacht,
die Methode kann nur String als Parameter bekommen
-> dann bekommt sie genau den String und nix weiter,
wenn du die Methode nicht ändern kannst (weitere Parameter),
dann musst du aussen rum das Objekt speichern (1.)
oder separat in einer zweiten Speicherstruktur (2.)
zu 1. wurde ja schon manches geschrieben,
Trick im wesentlichen:
nicht mit dem Objekt x mit der besagten Methode arbeiten,
sondern mit einem anderen Objekt,
das den String oder das x-Objekt und die zusätzliche Information speichert
zu 2. ist das so gemeint, dass du x.methode(String) normal verwendest,
und nebenbei eine Hashtable hast, da kannst du die zusätzliche Information speichern,
hashtable.put(String, info) oder hashtable.put(x-Objekt, info)
mit
hashtable.get(String)/ hashtable.get(x-Objekt)
Wenn ich eine Methode habe, die ein String-Objekt erwartet, wie
kann ich dieser dann eine Hashtabelle übergeben ?
Gar nicht. Muss auch nicht.
Kannst Du mir das vielleicht an einem kurzen Beispiel nochmals
etwas ausführlicher erläutern.
Erstmal braucht man eine Hashtable:
import java.util.\*;
public class Global{
public static Hashtable Informationen\_zu\_Strings = new Hashtable();
}
Ich nehm mal an du willst die String in irgendwelche „vordefinierten“ Methoden wie zum Beispiel:
JLabel.setText(String s)
stopfen. jlabel sein jetzt mal so ein JLabel.
irgendwo in irgendeiner Klasse:
String hallo = "blablabla";
Object informationen\_zu\_hallo = ...... was auch immer .....
Global.Informationen\_zu\_Strings.put (hallo,informationen\_zu\_hallo);
jlabel.setText(hallo);
Das Object „informationen_zu_hallo“ speicherst du nicht weiter. Es ist ja in der Hashtable eingetragen.
Irgendwann später an irgendeiner anderen Stelle im Code: