1. Gewinne jetzt ein UMiDIGI C Note - alle Informationen findest du hier!!
  1. Neudroid, 09.09.2010 #1
    Neudroid

    Neudroid Threadstarter Neuer Benutzer

    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: 09.09.2010
  2. DieGoldeneMitte, 09.09.2010 #2
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    "(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: 09.09.2010
    Neudroid gefällt das.
  3. Neudroid, 09.09.2010 #3
    Neudroid

    Neudroid Threadstarter Neuer Benutzer

    Danke für die ausführliche Antwort :)
     
Du betrachtest das Thema "Anfängerprobleme Klassenreferenz" im Forum "Android App Entwicklung",