W przeciwieństwie do anonimowych klas wewnętrznych, lambda w języku Java 8 nie zawiera odniesień do klasy otaczającej (rodzica). Android N adds support dla lambdas.Czy lambdas w kompilatorze z systemem Android N ma referencje do klasy?
Są one jednak implementowane w kompilatorze Jack
przy użyciu anonimowych klas wewnętrznych w celu zapewnienia kompatybilności wstecznej, co stanowi notatka w stanach łącza.
Czy to oznacza, że lambdy w klasach Androida skompilowane przy użyciu Jacka (a nie retrolambdy) będą zawierały odniesienia do klasy otaczającej?
wiem, że jedną z przyczyn wielu ludzi podekscytowany lambdas jest uniknięcie Fragment
lub Activity
przecieki podczas korzystania z nich, ale w pobieżnym skrócie, wygląda na to, używając jack
kompilator nie da tego świadczenia.
Możliwy duplikat [Czy Javad lambdas zachowuje odwołanie do ich otaczającej instancji, takiej jak anonimowe klasy?] (Http://stackoverflow.com/questions/28446626/do-java8-lambdas-maintain-a-reference-to-their -włączając-przykład-jak-anonimowy) –
@AndreClassen, to pytanie nie dotyczy Jacka, ale masz rację, może to być dupe, jeśli retrolambda dekompiluje lambdy do anonimowych klas wewnętrznych na poziomie bajtodu. –
Przy okazji, twoje założenie, że Java 8 lambdy nigdy nie ma odniesienia do otaczającej instancji, jest błędne - one oczywiście robią, jeśli muszą przechwytywać zmienne instancji. –