Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Los lambdas en el compilador de lazo de Android N tienen referencias a la clase de inclusión?

A diferencia de las clases internas anónimas, las lambdas de Java 8 no contienen referencias a la clase enclosing (parent). Android N agrega soporte para lambdas.

Sin embargo, se implementan en el compilador Jack utilizando clases internas anónimas para compatibilidad con versiones anteriores, como indica la nota en el enlace.

¿Significa esto que las lambdas en las clases de Android compiladas usando Jack (y no retrolambda) contendrán referencias a la clase inclusiva?

Sé que una razón por la que mucha gente estaba entusiasmada con lambdas es evitar fugas de Fragment o Activity al usarlas, pero a primera vista, parece que usar el compilador jack no dará ese beneficio.

One Solution collect form web for “¿Los lambdas en el compilador de lazo de Android N tienen referencias a la clase de inclusión?”

Creo que la frase "clase anónima" no debe interpretarse demasiado literalmente aquí. En mi entendimiento, lo único que quieren decirnos es que Jack genera las clases en tiempo de compilación (en contraposición al enfoque de tiempo de ejecución de Java 8).

Del código de JackIrBuilder adivinaría que el IR generado parece muy similar al bytecode que sería generado por retrolambda.

Jack parece crear un método sintético que contiene el cuerpo lambda en el tipo de inclusión y pasa la referencia de la instancia de inclusión al constructor de la clase generada sólo en aquellos casos en los que es necesario, es decir, cuando se capturan los miembros de la instancia de inclusión.

Referencia: https://android.googlesource.com/toolchain/jack/+/0af676c4779c5b55fb321f491811516f3d74ed93/jack/src/com/android/jack/ir/impl/JackIrBuilder.java

Por lo tanto, por lo que entiendo, la respuesta es: sólo cuando algo tiene que ser capturado de la instancia de inclusión.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.