pgoetz: Objekt in Long, String oder Integer parsen

Beitrag lesen

Hallo MichiLee,

[...]
String tmp= String birthday =((String)hashData.get("birthday").elementAt(i).toString());
Wenn in dem Object ein Geburtstag drin ist (Was von der Datenbank kam 1980-01-01) muss ich hinten ein toString() anhängen.
Jetzt frage ich mich warum, bzw. was als erstes greift, das toString() hinten oder das Casten vorne?

Das Objekt wird ermittelt, die toString()-Methode wird aufgerufen, und dann wird gecastet. Anders könnte es auch nicht gehen, weil Du z.B. ein java.util.Date nicht auf String casten kannst.

[...]
int tmp = ((Long)hashData.get("key").elementAt(i)).intValue();
Wenn ich nun in dem Object eine Zahl drin habe, geht nur das obere Konstrukt, aber   ((Integer)hashData.get("key").elementAt(i)).intValue() geht nicht? (Das irritiert mich auch einwenig. In meinem Beispiel ist da eine 1 drin.

Das liegt daran, dass man ein Long nicht auf Integer casten kann und Integer nicht auf Long. casten heißt ja immer, ich gebe den genauen Typ eines Objekts an. Wenn ein Objekt aber diesen Typ nicht hat, dann kann ich ihn dafür auch nicht angeben (ein Long ist kein Integer, das sieht man anhand der Vererbungshierarchie, weil sie beide von Object erben).

[...]
int tmp = Integer.parseInt((String)hashData.get("key").elementAt(0));
ging auch nicht, obwohl da eine 1 drin ist.

Was "ging" da nicht? Du versuchst, das Objekt am Index 0 des Vectors mit dem Schlüssel "key" als String zu casten. Ist es ein String? Dann geht das. Danach willst Du den String als int parsen. Wenn es ein String ist, dann geht das. Ich vermute, Du hast in dem Vector keinen String, sondern ein Zahlobjekt (z.B. Integer oder Long).

Schöne Grüße,

Peter