Typ eines Objekts zur Laufzeit bestimmen?

Status
Nicht offen für weitere Antworten.

fischerman

Mitglied
Hallo,

ich habe eine Liste von verschiedenen Objekten von denen ich den genauen Typ nicht kenne. Diese speichere ich in einer Variablen vom Typ Object.
Jetzt würde ich gerne dieses Objekt vom Typ Object in ein Objekt des eigentlichen Typs umwandeln. Kann dies dynamisch zur Laufzeit gemacht werden oder geht das nur über die explzite Abrage von Istanceof?

Danke für die Hilfe!

Gruß Martin
 
dynamisch in einen Typ umwandeln macht doch gar keinen Sinn,
angenommen es ginge, welchen Code würdest du dann hinschreiben?

DynamischerTyp d = (DynamischerTyp) object; ?

was hast du dann für Information gewonnen?
wenn du eine Operation aufrufen willst, wie Operation x von Klasse Y,
dann musst du doch so oder so das Objekt nach Y casten,
was könnte dabei dynamisch sein?
 
evtl kannst du damit etwas anfangen:
Object o = new HashMap();
Integer i = new Integer(1);
Integer j = i.getClass().cast(o);

Aber Object o = new Integer(2); sollte gehen...
es gobt noch getClass() ...
 
Eigentlich ist die Abfrage mit instanceof die richtige und schnellste Möglichkeit ein Objekt auf einen Typ zu prüfen. Man kann es allerdings auch auf folgendem Wege tun:

Code:
String classNameOfMyUnknownObject = myUnknownObject.getClass().getName();

if("java.util.Date".equals(classNameOfMyUnknownObject)) {
   // mein Objekt ist vom Typ java.util.Date
   Date myDate = (Date) myUnknownObject;
}

Kann man so machen, sollte man aber besser mit instanceof prüfen. Zumal du ja auch "explizit" casten wirst, oder?

Für "dirty-Tricks" kann man ja mal einen Blick in die Reflection-API (java.lang.reflect) werfen. Da hat man mehrere Möglichkeiten relativ dynamisch zu programmieren.

Was möchtest du denn überhaupt tun? Vielleicht gibts ja ne elegante Lösung?

Gruß, Florian
 
FlorianP hat gesagt.:
Was möchtest du denn überhaupt tun? Vielleicht gibts ja ne elegante Lösung?
Das ist genau die richtige Frage. instanceof bedeutet immer konditionalen Code. In idealer OOP wissen die Objekte von alleine was zu tun ist.
Allerdings ist instanceof manchmal effektiver als ein utopisches, perfektes Design.
Aber um beurteilen zu können ob instanceof hier richtig ist, reichen die Informationen nicht aus.
 
ja.. meist reicht ein einfacheres design bzw interface definition schon aus...
 
Viele instanceOf deuten auf ein Designfehler hin, polymorphie wäre u bevorzugen.
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben