Domanda

Quindi, perché non è toString sempre invocato? Questo è un esempio utilizzando l'API di Android.

es

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

non verrà compilato. Tuttavia, se lo cambio a

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

Sarà. Qual è la differenza reale?

È stato utile?

Soluzione

Che cosa si intende per sempre? toString() è solo un metodo che restituisce una rappresentazione String dell'oggetto. Il Toast.makeText si aspetta un parametro String, ma nel primo caso vi darà un oggetto della classe AdapterView. Così non si compila:)

Altri suggerimenti

adapterView non è un String.

toString() non viene richiamato automaticamente dal compilatore per eseguire un cast - che metterebbe a repentaglio la sicurezza di tipo un po '. Solo quando c'è un +"" per esempio, il compilatore chiamerà toString () in modo automatico.

L'unica situazione in cui toString () è inserito dal compilatore è in concatenazione stringa.

Inoltre, questo

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

compilerà;)

Non so l'API di Android, ma AdapterView non è in realtà una sottoclasse di CharSequence quindi bisogna applicare toString ().

suppongo secondo parametro di Toast.makeTest è di tipo String. Poi cercando di passare un parametro di tipo AdapterView non funzionerà. toString () non viene mai chiamato automaticamente, tranne quando concatenazione di stringhe ( "" + adapterView funzionerebbe pure, ma è più brutto).

Il compilatore decide quale metodo è richiesto dal nome del metodo e il numero e il tipo di ogni argomento fornito. Nel tuo primo esempio, cerca un metodo chiamato makeText che ha un AdapterView come secondo parametro e reperti nessuno (il vostro errore di compilazione avrebbe te l'ha detto. Nel vostro secondo esempio il secondo parametro è una stringa e il compilatore trova il corrispondente metodo. Si noti che il compilatore non riesce a trovare il metodo prima, poi fare i parametri in forma, altrimenti non abbiamo potuto avere metodi di overload.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top