A differenza delle classi interne anonime, Java 8 lambda non mantiene i riferimenti alla classe di inclusione (genitore). Android N adds support per lambda.Do lambda nel compilatore di Android N jack contiene i riferimenti alla classe di inclusione?
Tuttavia, sono implementati nel compilatore Jack
utilizzando classi interne anonime per compatibilità con le versioni precedenti, come indicato dalla nota negli stati del collegamento.
Ciò significa che lambda in classi Android compilate utilizzando Jack (e non retrolambda) manterrà i riferimenti alla classe di chiusura?
So che uno dei motivi molte persone erano entusiasti lambda è quella di evitare Fragment
o Activity
perdite quando li utilizzano, ma ad uno sguardo superficiale, sembra che usando jack
compilatore non darà quel beneficio.
Possibile duplicato di [Do Java8 lambdas conserva un riferimento all'istanza che li include come classi anonime?] (Http://stackoverflow.com/questions/28446626/do-java8-lambdas-maintain-a-reference-to-the-their -enclosing-instance-like-anonymous) –
@AndreClassen, quella domanda non copre Jack, ma hai ragione, potrebbe essere un dupe se retrolambda decompila anche lambda alle classi interne anonime a livello bytecode. –
Btw, la tua ipotesi che Java 8 lambda non abbia mai un riferimento all'istanza acclusa è sbagliata - ovviamente lo fanno se devono catturare le variabili di istanza. –