MichiLee: Objekt in Long, String oder Integer parsen

Beitrag lesen

Hi Peter,

Das braucht Dich nicht zu irritieren. Du "tust" die Instanzen nicht als Object in den Vector, sondern Du triffst keine weiteren Einschränkungen, als dass es Objekte sind. Wenn Du eine Tasche hast (Achtung, Real World Beispiel), und Du definierst, dass in diese Tasche Objekte reingetan werden dürfen, dann kannst Du in diese Tasche eine Banane und eine Handgranate stecken. Beides sind Objekte. Sie werden aber durch das reintun nicht zu irgendeinem abstrakten "Object", sondern bleiben Banane und Handgranate. Nur beim rausholen musst Du selbst aufpassen, bei welchem Objekt Du an der angefügten Lasche ziehst. ;)
Die Typangabe bei einer Collection sagt aus, dass Objekte dieses Typs und spezialisierter Untertypen in die Collection gepackt werden dürfen. Da alles ein Spezialtyp von Object ist, kann alles in die Collection gepackt werden. Es behält aber seinen Spezialtyp und muss beim rausholen auf diesen gecastet werden, wenn spezielle Methoden (also nicht von Object" definert) verwendet werden sollen.

das hast du wie immer mal wieder sehr schön erklärt. Nochmals vielen Dank. Ich kriege auch schon ein schlechtes Gewissen, wenn ich so viel Frage und Leute für mich Zeit opfern müssen. Hoffentlich werde ich aber auch mal zum Checker und kann anderen helfen.

Kurz nochmal zur Thematik.
Ich dachte wie gesagt, dass folgende Methode zum Auslesen aus der Datenbank alles als striktes Objekt holt:

while (i <= rs.getMetaData().getColumnCount()) {
data.add(rs.getObject(i));

Vor allem, weil rs. ja auch Methoden hat, wo es verschiedene andere Typen zurückgeben könnte.

int count=((Long)hashData.get("count(*)").elementAt(0)).intValue();

Mir ist auch aufgefallen, dass ich bei einem count(*) das Objekt auch in ein Long casten muss, damit es funktioniert, ein Integer geht nicht. Auch interessant zu wissen.

Wie ich von Deinem Vorbeitrag herausgelesen habe, kann ich ja nur beim Casten den Typ angeben. Dann ist mir im vorherhigen Beitrag das mit Long und Integer klar. (Eigentlich bräuchte ich dann das intValue() garnicht extra aufrufen, wenn es eh ein Zahlenobject ist und ich richtig Caste). Bei Birthday hab ich aber noch ein kleines Problem:

String tmp= String birthday =((String)hashData.get("birthday").elementAt(i)).toString();

In der Datenbank ist es als Date angegeben, dann sollte doch das Casten in (String) auch nicht möglich sein. Laut der Klammerung (verändert) sollte er aber erst Casten und auf das ermittelte Objekt die Methode toString() anwenden

Viele Grüße und einen schönen Abend noch
Michi