Daniel Thoma: Casting

Beitrag lesen

Hallo Sonya,

Beim Casting von Typen findet tatsächlich eine Umwandlung statt:
long l = 7000;
int i = (int)l;

Beim Casting von Objekten wird aber nichts umgewandelt. Du Teilst dem Kompiler nur mit, um was für ein Objekt es sich handelt:

Object obj = new StringBuffer();

obj.append("asd");
/* Das führt zu einem Kompilerfehler. Zwar verweist obj in diesem Fall auf einen StringBuffer, der Kompiler kann das aber noch nicht wissen und erzeugt ein Fehler weil obj auf beliebige Objekte verweisen kann. */

((StringBuffer)obj).append("asd");
/* Das lässt sich kompilieren. Der Kompiler weiß jetzt, dass er hier einen StringBuffer erwarten kann. Wenn aber in obj zur Laufzeit kein StringBuffer wäre, würde das Programm mit einer ClassCastException abgebrochen. */

if(obj instanceof StringBuffer) {
  ((StringBuffer)obj).append("asd");
}
/* Damit ist man immer auf der sicheren Seite */

Grüße

Daniel