Anfängerprobleme Klassenreferenz

N

Neudroid

Neues Mitglied
0
Hallo zusammen,
ich versuche mich gerade in die Android-Programmierung 'einzulesen' und habe da mal eine Frage.

Ich durchschaue einen solchen Ausdruck nicht:

MyApp appState = ((MyApp)getApplicationContext());

MyApp ist meine Applikations-Klasse und appState eine Variable vom Typ
MyApp die mit diesem Ausdruck erstellt werden soll . Was bedeutet aber das die rechte Seite in Klammern steht und das geklammerte (MyApp) auf der rechten Seite. Ich finde einfach nirgendwo eine Erklärung da man nach "(" auch schlecht suchen kann ;-) Ich würde annehmen (MyApp) soll bewirken daß ein Typ MyApp erzwungen wird damit der Compiler keinen Fehler meldet. Wie bei (int) (2/3) ???

Vielleicht kann mich jemand aufklären

Danke neudroid
 
Zuletzt bearbeitet:
Neudroid schrieb:
MyApp appState = ((MyApp)getApplicationContext());

"(Typname)" ist ist ein "Casting Operator", der das Objekt hinter dem Operator in ein Objekt des Typs Typname umwandelt. Das geht natürlich (bzw im Gegensatz zu Sprachen wie C) nur dann, wenn das Objekt wirklich diesen Typ hat. Wenn nicht wird eine ClassCastException ausgelöst.

Wieso muss man hier casten? Das hattest du so ungefähr schon richtig: getApplicationContext() liefert in einer Activity ein Objekt vom Typ Context, und zwar die aktuelle Activity. Wenn man nun mit seiner Activity etwas machen will, will man da meist eigene Funktionen aufrufen. Da der Compiler da ein Context Objekt sieht, und nicht ein MyApp, wird er das nicht kompilieren. Der Cast sagt dem Compiler, dass er das Contextobjekt nun als MyApp Objekt auffassen soll. Wichtig: da wird nichts "umgewandelt". Wenn das Objekt NICHT MyApp ist, gibts zur Laufzeit eine Exception.

Die Klammern um den Gesamtausdruck sind in diesem konkreten Fall überflüssig. Man braucht sie aber, wenn man in einem komplexeren Ausdruck mit dem gecasteten Objekt etwas machen will. Zum Beispiel:
Code:
((MyApp)getApplicationContext()).methode()
Ohne die äußeren Klammern wäre nicht klar, ob das Ergebnis von getAppContext() oder das von methode() gecastet werden soll.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: Neudroid
Danke für die ausführliche Antwort :)
 

Ähnliche Themen

F
  • Fuchs91
Antworten
4
Aufrufe
657
markus.tullius
markus.tullius
P
Antworten
5
Aufrufe
1.965
mkl
M
Zurück
Oben Unten