# Eigene Objekte casten



## Schimmelbart (6. Juni 2006)

Moin

Ich habe eine Oberklasse G42Object, von der ich mehrere Unterklassen, so auch die CGObject, ableite. Die G42Object hat keine eigene Funktionalität, sondern dient nur dazu, mehrere und verschiedene Objekte der Unterklassen in einem Array transportieren zu können. Es werden also keine Funktionen vererbt, überschrieben oä.

Nachdem ich ein Objekt, als Beispiel das CGObject, aus dem G42Object-Array ausgelesen habe möchte ich, natürlich erst nach einer instanceof-Prüfung, auch auf die von CGObject implementierten Methoden zugreifen. Soweit nichts besonderes, denke ich.

Ich habe versucht, das aus dem Array gelesene G42Object mithilfe eines 'temporären' CGObject in ein solches zu casten (mal ein bisschen Code für die Anschauung^^):

perception ist das angesprochene G42Object[][]
cfq ist ein Objekt, das die Funktionen setColor und setForm bereitstellt und einen String erwartet, diese Funktionalität ist an anderer Stelle schon mehrfach getestet worden und funktioniert
die Funktionen getColor und getForm von CGObject liefern beide einen String, der nie ungesetzt ist (per Konstruktor sichergestellt)

```
CGObject objecttemp = new CGObject();
                if (perception[i][j] instanceof CGObject)
                {
                       objecttemp = (CGObject)perception[i][j];
                                Logging.log("Das Casten klappt");
                       this.cfq.setColor(objecttemp.getColor());
                                Logging.log("Das Setzen der Farbe klappt");
                       this.cfq.setForm(objecttemp.getForm());
                                Logging.log("Das Setzen der Form klappt");
                }
```

Jetzt komme ich endlich zum Problem:

Der Compiler meckert nicht, der Typ-Cast scheint für ihn kein Problem zu sein.
Die Log-Meldung "Das Casten klappt" wird problemlos ausgegeben, danach erhalte ich eine java.lang.NullPointerException. 

Scheinbar klappt das Casten doch nicht soo.... :/
auch ein Doppelcast wie etwa 
	this.cfq.setColor(((CGObject)objecttemp).getColor());
hat daran nichts geändert.


Wär schön wenn mir da jemand helfen könnte, ich fürchte ich habe irgendetwas übersehen... leider hat mir weder die Suche noch die Insel weitergeholfen

danke schonmal 



edit: jetzt mit leerzeichen statt tabs^^

edit2: hat auch nichts gebracht...^^


----------



## Christian Fein (6. Juni 2006)

Nun der 'Compiler meckert dir nicht wenn du eine null  castest 

Teste es aus:

```
Object[] obs = new Object[2];
obs[0] = new Integer(9);
obs[1] = null;
for(Object o : obs) {
	Integer i = (Integer)o;
	System.out.println(i);
}
```


this.cfq.setColor(objecttemp.getColor());
<-- Diese Zeile ist schuld an der Nullpointer.

Entweder Debugger Breakpoint reinsetzen oder aber:
if (this.cfq==null) Logging.log("cfq ist die Sau");
if(objecttemp==null) Loggin.log("objecttemp ist die sau");
die dritte möglichkeit ist das irgendwas in getColor() passiert wo ein 
nullpointer geworfen werden kann. Leider haben wir keinen aussagekräftigen
Stacktrace.


----------

