# Objekt Casten



## smung0r (24. Jun 2008)

Hi,
ich hole mir Daten aus einer Datenbank mit Hilfe von Hibernate.

Ich bekomme also eine List zurück wo jede Menge Objekte drin sind.

In meine Beispiel wären die vom Typ Contact.

Kann ich ein Objekt umcasten?

zb. 

PseudoCode:

```
Object obj;

obj = new liste.get(i).getClass();

obj.getfirstname();

...
```

Ist sowas irgendwie möglich?

Ich möchte später eine jTable füllen und auf nichts achten müssen. d.h. Jtable mit den Objekten der List füllen. Und es soll egal sein von welchem Typ die sind.


Viele grüße und schonmal danke im vorraus

smung0r


----------



## Guest (24. Jun 2008)

Ich hab mal wieder Verständnisprobleme. Ob das an mir liegt oder an den Fragen hier im Forum....

Grundsätzlich kannst du so casten (mit instanceOf kannst du vorher prüfen ob das Objekt eine Instanz von der gewünschten Klasse ist). Wenn du diese Überprüfung nicht vornimmst kann es sein dass eine Exception fliegt:

```
Object o = .... daten von irgendwoher
if(o instanceOf String){
   String s = (String)o;
}
```


----------



## Guest (24. Jun 2008)

Ja so bekomm ich das auch hin.
Problem ist, ich müsste für jede Klasse die in der Datenbank gespeichert ist so eine Abfrage schreiben. Und das würde ich gerne umgehen.

Giibt es eine Möglichkeit dies auf egal welche Klasse umzubiegen?


----------



## Marco13 (24. Jun 2008)

Und ... unter welchem Typ willst du die Objekte dann zur Verfügung haben?

Xxx xxx = readObjectFromDB();
xxx.callTheMethodThatIsAvailableInClassXxxAlthoughNobodyKnowsWhichClassThisIs();

Yyy yyy = readObjectFromDB();
yyy.callTheMethodThatIsAvailableInClassYyyAlthoughNobodyKnowsWhichClassThisIsEither();


----------



## JohnMurdoch (25. Jun 2008)

a) Vererbe deine Entityklassen (die mit den Hibernate-Annotationen) von einer abstrakte oberklasse und gebe der liste diesen neuen abstrakten basisklasse als typ:

List<? extends AbstrakterSuperTyp> liste = new ArrayList<AbstrakterSuperTyp>();


b) packe in die abstrakte oberklasse eine abstrakte methode wie z.b. getfromdb(bla)
und überschreibe diese in den entityklassen.

nun kannst du beim iterieren über die liste diese methoden aufrufen (polymorphie)


----------

