Frage

Also, warum nicht ist toString immer aufgerufen? Dies ist ein Beispiel für den Android-API verwenden.

Z. B

@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
        int position, long id) {
    Toast.makeText(this, adapterView, Toast.LENGTH_LONG).show();
}

Wird nicht kompilieren. Allerdings, wenn ich es

ändern
@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
            int position, long id) {
    Toast.makeText(this, adapterView.toString(), Toast.LENGTH_LONG).show();
}

Es wird. Was ist der eigentliche Unterschied?

War es hilfreich?

Lösung

Was meinst du immer? toString() ist nur ein Verfahren, das eine String Darstellung des Objekts zurückgibt. Die Toast.makeText erwartet einen String Parameter, aber im ersten Fall geben Sie ein Objekt der Klasse AdapterView. So wird es nicht kompilieren:)

Andere Tipps

adapterView ist kein String.

toString() wird nicht automatisch vom Compiler aufgerufen, um einen Guss auszuführen - die Typsicherheit ein wenig beeinträchtigt würde. Nur wenn ein +"" zum Beispiel gibt es, wird der Compiler nennt toString () automatisch.

Die einzige Situation, in der toString () von dem Compiler eingefügt wird, ist in String-Verkettung.

Auch dies

@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
            int position, long id) {
    Toast.makeText(this, "" + adapterView, Toast.LENGTH_LONG).show();
}

kompilieren;)

Ich weiß nicht, den Android API, aber AdapterView ist nicht wirklich eine Unterklasse von CharSequence, so dass Sie gelten müssen toString ().

Ich nehme an Toast.makeTest zweite Parametern vom Typ String ist. Dann versucht, einen Parameter des Typs AdapterView funktioniert nicht passieren. toString () wird nie automatisch aufgerufen, mit der Ausnahme, wenn Strings verketten ( „“ + adapterView würde auch funktionieren, ist aber hässlich).

Der Compiler entscheidet, welche Methode aus dem Namen des Verfahrens erforderlich ist, und die Anzahl und Arten der einzelnen Argumente geliefert. In Ihrem ersten Beispiel, sucht er nach einem Verfahren Maketext genannt, die eine AdapterView als zweiten Parameter hat, und findet keine (Ihre Compiler-Fehler haben würden Sie das gesagt. In Ihrem zweiten Beispiel der zweite Parameter ist ein String und der Compiler findet die passende Methode. Beachten Sie, dass der Compiler die Methode zuerst finden können, dann machen die Parameter passen, sonst könnten wir nicht überladene Methoden haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top