Recientemente descubrí que AndroidStudio me recuerda que elimine parte del reparto de clases. Recuerdo que en el pasado, teníamos que emitir el resultado de findViewById, pero ahora no es necesario.
El resultado de findViewById sigue siendo View, así que quiero saber por qué no necesitamos emitir la clase.
No puedo encontrar ningún documento mencionado, ¿alguien puede encontrar algún documento?
android
casting
findviewbyid
Eric Zhao
fuente
fuente
<T extends View> T findViewById(int id)
?Respuestas:
Comenzando con API 26,
findViewById
usa inferencia para su tipo de retorno, por lo que ya no tiene que emitir.Antigua definición:
Nueva definición:
Entonces, si
compileSdk
tiene al menos 26 años, significa que puede hacer uso de esto :)fuente
ClassCastException
.De acuerdo con este artículo :
fuente
En versiones anteriores:
Desde Android Studio 3.0 con SDK 26:
fuente
Android Studio recuerda eliminar la transmisión, si usa atributos comunes de la clase View , como visibilidad o algunos métodos comunes, como onClick ()
Por ejemplo:
En este caso, simplemente puede escribir:
fuente
Android 0, limpieza de casting
Una de las cosas que Google anuncia en IO 2017 es algo que se llama 'desechar' :). El desarrollador de Android no tiene que hacer una conversión manual para findViewById (). Por ejemplo, la forma anterior de obtener una vista de texto usando findViewById () sería algo como esto.
Mientras que la nueva forma sería así
Es un cambio simple. Pero para un programador experimentado, un código limpio como este puede hacerte muy feliz y te ayuda con tu estado de ánimo de codificación :)
Para poder hacer esto, solo necesita configurar la versión sdk compilada de su proyecto a la versión 26 en su aplicación build.gradle.
Todavía puede apuntar a una versión sdk anterior también, por lo que es un cambio no intrusivo.
Ahora, el verdadero problema, ¿cómo se limpia ese código antiguo que usa la conversión todo este tiempo? Especialmente cuando tienes como cientos de archivos de actividad. Puedes hacerlo manualmente, o tal vez contratar a un interno para hacerlo 😛. Pero afortunadamente para todos esos pasantes, el estudio de Android ya está preparado para ayudarnos con esto.
Cuando pongas tu caret (o hagas clic en el casting redundante), Android Studio te sugerirá 2 opciones para manejar el casting redundante.
Primero, sugerirá eliminar esa conversión redundante o puede seleccionar el código de limpieza. Eliminará toda la conversión redundante para ese archivo. Esto es mejor, pero queremos más. No queremos abrir cada archivo y hacer esta limpieza uno por uno.
Una de las cosas que hace que la idea de IntelliJ sea especial es que es una característica que se llama acción intencional. Todo lo que tienes que hacer es presionar ctrl + shift + A y luego escribir clean. Y seleccione la acción Limpiar código y seleccione todo el alcance del proyecto. Con estos simples pasos, su código será mucho más limpio.
Un punto importante es que haga esto con algún sistema de versiones de código. De esta manera, puede comparar los cambios realizados por la acción intencional y revertir los archivos que desee.
Copiado de la publicación original:
https://medium.com/@abangkis/android-0-clean-up-casting-c30acec56cef
fuente
why
, nohow
:The result of findViewById is still View, so i want to know why we don't need to cast the class?
En el código fuente de
ViewGroup
, hay un reparto del argumento de retorno. Entonces no hay necesidad de lanzar nuevamente:fuente