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 restrizione sull’ambito delle variabili a cui può accedere. Ci sono alcune situazioni molto specifiche in cui l’uso di una classe interna anonima può rendere più leggibile il codice sorgente, ma è principalmente usato per aiutare a rafforzare l’incapsulamento laddove la generazione di classi separate potrebbe complicarlo.

L’incapsulamento è il concetto nella programmazione orientata agli oggetti (OOP) che un oggetto e i suoi componenti dovrebbero essere in qualche modo protetti e legati all’oggetto. Classi interne anonime, e classi interne in generale, aiutano a realizzare l’incapsulamento per oggetti particolarmente complessi. Invece di dover creare una classe che si basi su una classe esterna separata, legandoli insieme artificialmente e potenzialmente esponendo alcuni dei componenti, una classe interna anonima può legarli insieme in modo solido.

In alcuni linguaggi di programmazione, una classe interna anonima può aiutare a superare le restrizioni dell’ereditarietà singola. Se un oggetto eredita da una classe ma poi ha bisogno di accedere a un’altra, una classe interna può essere generata al volo e poi passata ai gestori appropriati. Questa tecnica è comune con i callback e i listener di eventi. L’unica alternativa sarebbe creare un’intera seconda classe in cui vengono sovrascritti solo uno o due metodi.

Le classi interne anonime hanno alcune restrizioni in atto per impedire l’interruzione dell’incapsulamento e per imporre 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 definitive. Questo perché la classe interna potrebbe continuare a funzionare oltre la vita della classe e del metodo in cui si annida. Le variabili della classe wrapping verrebbero distrutte una volta terminata la sua vita, quindi i riferimenti contenuti nella classe interna diventerebbero immediatamente non validi. L’unica eccezione a questa è una variabile finale, 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 sezionare un’altra classe e vedere quali sono le variabili ei metodi membri, ma non il codice stesso. Utilizzando una classe interna anonima, i contenuti della classe interna sono protetti dalla riflessione e il funzionamento interno della classe più ampia può essere efficacemente nascosto.