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
> 
>

Reply via email to