# Typ eines Objekts zur Laufzeit bestimmen?



## fischerman (21. Sep 2007)

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


----------



## SlaterB (21. Sep 2007)

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?


----------



## jPat (21. Sep 2007)

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() ...


----------



## FlorianP (21. Sep 2007)

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: 


```
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


----------



## Wildcard (21. Sep 2007)

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.


----------



## bygones (21. Sep 2007)

ja.. meist reicht ein einfacheres design bzw interface definition schon aus...


----------



## maki (21. Sep 2007)

Viele instanceOf deuten auf ein Designfehler hin, polymorphie wäre u bevorzugen.


----------



## thomator (25. Sep 2007)

Seh ich auch, wie meine Vorredner: Abstrahieren, Interfaces drauf und ab der Fisch...


----------



## fischerman (25. Sep 2007)

Danke für die vielen Antworten,

Ich habe Euren Rat befolgt und das ganze über Interfaces gelöst.

Gruß fischerman


----------

