Pregunta

¿Por qué es que no siempre toString invocado? Este es un ejemplo utilizando la API de Android.

por ejemplo

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

no se compilará. Sin embargo, si lo cambio a

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

Lo hará. ¿Cuál es la diferencia real?

¿Fue útil?

Solución

¿Qué quiere decir por siempre? toString() es sólo un método que devuelve una representación String del objeto. El Toast.makeText espera un parámetro String, pero en el primer caso se da un objeto de la clase AdapterView. Por lo tanto, no se compilará:)

Otros consejos

adapterView no es un String.

toString() no se invoca automáticamente por el compilador para realizar un reparto - que comprometa la seguridad de tipos un poco. Sólo cuando hay una +"" por ejemplo, el compilador llamará toString () de forma automática.

La única situación en la que toString () se inserta por el compilador está en la concatenación de cadenas.

También, este

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

compilará;)

No sé la API de Android, pero AdapterView en realidad no es una subclase de CharSequence así que hay que aplicar toString ().

supongo segundo parámetro de Toast.makeTest es de tipo String. A continuación, tratando de pasar un parámetro de tipo AdapterView no va a funcionar. toString () nunca es llamado automáticamente, excepto cuando la concatenación de cadenas ( "" + adapterView funcionaría así, pero es más feo).

El compilador decide qué método se requiere a partir del nombre del método y el número y tipo de cada argumento suministrado. En el primer ejemplo, se busca un método llamado Maketext que tiene una AdapterView como su segundo parámetro, y no lo halla (el error de compilación tendría que haber dicho eso. En el segundo ejemplo, el segundo parámetro es una cadena y el compilador encuentra la coincidencia método. Tenga en cuenta que el compilador no puede encontrar el método en primer lugar, a continuación, hacer que los parámetros de ajuste, de lo contrario no podríamos tener métodos sobrecargados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top