Credo che sia utile immaginare le inner class anonime come delle closure. Nel tuo esempio: restituisci un'istanza di un'inner class anonima, ed e' una buona cosa che in quella inner class tu possa accedere alle variabili della classe dentro a cui la costruisci; altrimenti l'utilita' di poter costruire una inner class anonima al volo e' limitata.
On Sun, Dec 2, 2018 at 11:11 PM Uberto Barbini [email protected] [it-torino-java-jug] <[email protected]> wrote: > > > Ciao Federico e grazie per le interessanti osservazioni. > > Sinceramente a me non interessa moltissimo il "trucco" delle tuple > anonime, carino ma insomma non lo userei in produzione, leak o non leak. > > Il pattern del doppio curlybraces poi non l'ho mai potuto soffrire. > > La cosa che invece mi ha un po' preoccupato e' l'idea che implementando > una interfaccia al volo mando in giro un riferimento all'istanza della > classe che l'ha creata. > > Per dire codice tipo questo: > https://gist.github.com/uberto/c37970ba1d3b49c61568809085a84d1f > > Ecco codice cosi' io l'ho scritto in produzione e non avevo idea che stavo > mandando in giro un riferimento alla classe creatrice. > > Per curiosita' ho provato con un metodo statico e in questo caso la classe > anonima creata non ha un riferimento alla factory. Penso sia una static > inner class ma non so se c'e' un modo sicuro per dirlo. > > Uberto > > > > > > > > On Sun, 2 Dec 2018 at 11:28, Federico Fissore [email protected] > [it-torino-java-jug] <[email protected]> wrote: > >> >> >> Matteo Vaccari [email protected] [it-torino-java-jug] ha scritto >> il 01/12/18 alle 19:42: >> > >> > Non e' ovvio! Grazie per avermelo ricordato. >> > >> >> Prego e grazie per il grazie. Come dice il saggio, è l'unica parola che >> non perde mai valore, anche detta migliaia di volte. >> >> Mi scuso se ho dato per scontato che parlavo di istanze di classi e non >> solo di classi >> >> Uberto Barbini [email protected] [it-torino-java-jug] ha scritto il >> 02/12/18 alle 11:24: >> > >> > credo che se le fai generare da un metodo statico sei tranquillo, ma >> > vorrei fare dei tests più approfonditi... >> > >> >> Bella domanda >> >> Ho provato a modificare lo snippet condiviso prima: se dichiari static >> il metodo Filter3.filter, il compilatore va in errore alla riga "return >> Filter3.this.sayHi()". Che ha senso: se la inner class viene usata in un >> metodo statico, non c'è istanza a cui fare riferimento >> >> Allora ho fatto un'altra prova usando questo snippet >> >> https://gist.github.com/ffissore/f410842f6e83e31c326889155e5162b6 >> >> e ho scoperto una cosa che non sapevo: fra i "campi nascosti" che ti >> becchi con una inner class c'è anche la "v" (String) usata nel metodo >> map dello stream (accessibile con it.jugtorino.Filter4$1.val$v). Che di >> nuovo non è banale, se l'intenzione del programmatore era destrutturare >> un oggetto ricco e complesso, per fornire al chiamate solo quelle "2 >> cose che gli servono" >> >> federico >> > >
