Klammernpaar

Nico05

Mitglied
Hallo,
Ich bin gerade dabei, LibGDX mit dem Buch "Java Game Development with LibGDX" zu lernen.
Dort sind mir aber folgende Zeilen aufgefallen:

list.add( (BaseActor)a );
und
InputMutiplexer im = (Input Multiplexer)Gdx.Input.getInputProcessor();
Mir ist bewusst, dass das erste Beispiel kein Methodenaufruf ist, aber es wäre trotzdem nett, wenn mir jemand erklären könnte, was es zu bedeuten hat, wenn ein Klammernpaar vor einem Objekt, beziehungsweise vor einem Methodenaufruf steht.
 

httpdigest

Top Contributor
Wann immer ein Typname in runden Klammern vor einem anderen Ausdruck steht, handelt es sich um einen Cast. Damit sagt der Programmierer: "Ich sichere zu, dass der Ausdruck auf der rechten Seite neben dem Klammerpaar genau diesen (statischen) Typ hat. Also lieber Compiler, glaube mir und nehme für alles weitere an, dass der Ausdruck diesen (statischen) Typ hat. Zur Laufzeit kann dann der durch den Ausdruck generierte Wert als Laufzeittyp diesen oder einen abgeleiteten Typ haben."

Im ersten Beispiel wird das Argument `a` des Methodenaufrufes `list.add(...)` nach `BaseActor` gecastet.
Im zweiten Beispiel wird der Rückgabewert vom Aufruf `Gdx.Input.getInputProcessor()` nach `InputMultiplexer` gecastet.

Da Kontrolle aber besser ist als Vertrauen, baut der Compiler auch noch einen Check ein, der zur Laufzeit prüft, ob der Wert, den der Ausdruck zur Laufzeit generiert, auch diesen Laufzeittyp (oder einen davon abgeleiteten Typ) hat. Falls das nicht der Fall sein sollte, wird dann eine ClassCastException geworfen.

Bezüglich der Java Grammatik kann ein Cast als unärer Operator (gleich dem unären - oder ! oder pre-increment/decrement gesehen werden), die alle dieselbe Präzedenz haben und von rechts nach links ausgewertet werden.
 

Neue Themen


Oben