Che cos'è una classe interna anonima?
Nella programmazione per computer orientata agli oggetti, una classe interna anonima è una classe dichiarata all'interno di un metodo ma senza nome. Una classe interna anonima ha diverse restrizioni che la rendono diversa da una classe normale, inclusa una limitazione dell'ambito delle variabili a cui può accedere. Esistono alcune situazioni molto specifiche in cui l'utilizzo di una classe interna anonima può rendere più leggibile il codice sorgente, ma viene principalmente utilizzato per rafforzare l'incapsulamento in cui la generazione di classi separate potrebbe complicarlo.
L'incapsulamento è il concetto nella programmazione orientata agli oggetti (OOP) secondo cui un oggetto e i suoi componenti dovrebbero essere in qualche modo protetti e legati all'oggetto. Le classi interne anonime e le classi interne in generale aiutano a realizzare l'incapsulamento di oggetti particolarmente complessi. Invece di dover creare una classe che si basa su una classe esterna separata, legandole insieme artificialmente e potenzialmente esponendo alcuni dei componenti, una classe interna anonima può legare i due insieme solidamente.
In alcuni linguaggi di programmazione, una classe interna anonima può aiutare a superare le restrizioni della singola eredità. Se un oggetto eredita da una classe ma deve quindi accedervi, una classe interna può essere generata al volo e quindi passata ai gestori appropriati. Questa tecnica è comune con callback e listener di eventi. L'unica alternativa sarebbe quella di creare un'intera seconda classe in cui vengono sovrascritti solo uno o due metodi.
Le classi interne anonime hanno alcune restrizioni in atto per prevenire la rottura dell'incapsulamento e per rafforzare l'ambito. La restrizione principale è che una classe interna anonima non può accedere alle variabili del metodo in cui risiede a meno che tali variabili non siano dichiarate come finali. Questo perché la classe interna potrebbe continuare a funzionare oltre la vita della classe e del metodo in cui nidifica. Le variabili della classe avvolgente verrebbero distrutte una volta terminata la sua vita, quindi i riferimenti contenuti nella classe interna diventerebbero immediatamente non validi. L'unica eccezione a questa è un'ultima variabile, perché esisterà oltre l'istanza.
Uno degli usi più specifici per una classe interna anonima è la protezione del codice. Molti linguaggi OOP prevedono un meccanismo chiamato riflessione. Reflection consente a un programma di dissezionare un'altra classe e vedere quali sono le variabili e i metodi dei suoi membri, ma non il codice stesso. Usando una classe interna anonima, i contenuti della classe interna sono protetti dalla riflessione e il funzionamento interno della classe più grande può essere effettivamente nascosto.