Uberto Barbini [email protected] [it-torino-java-jug] ha scritto il > In tutti i casi pero', anche se volessi restituire una collezione di > Object non c'e' memory leak comunque, non sono inner class ma classi > anonime senza alcun rapporto con la classe principale. > C'e' una inner class creata implicitamente dalla lambda, ma quella > finisce col ciclo.
Le classi anonime sono inner class, e quindi hanno un riferimento alla classe padre, piaccia o no Quello che descrivi invece è una static inner class, che però non può essere anonima Visto che la tupla dell'esempio di Simone non è utile a tornare dati, cambio l'esempio usando una mappa e la sintassi delle doppie parentesi graffe https://gist.github.com/ffissore/e4915691cc539b0954faf815609cdceb "...new HashMap() {..." è una inner class, anonima, e può accedere alla classe genitore con la sintassi "Filter3.this." Nel metodo "inspectInOtherMethod", l'instanza di Filter3 non è raggiungibile, eppure la mappa restituita è in grado di accedere ai suoi metodi. Se serve altra letteratura a proposito, Lukas Eder in questo post lo spiega bene [1]. Si focalizza sulle doppie parentesi graffe, ma solo perchè sono la sintassi più compatta per ottenere qualcosa di simile a una Tupla in java. La sorgente del problema memory leak è l'aver tornato un'istanza di una inner class [1] https://blog.jooq.org/2014/12/08/dont-be-clever-the-double-curly-braces-anti-pattern/ NB: se nelle vostre codebase usate la sintassi delle doppie graffe, buttatele e migrate o a "ImmutableMap.of" di Guava, o fatevi il vostro metodo di utilità federico
