Što je anonimna unutarnja klasa?

U objektno orijentiranom računalnom programiranju, anonimna unutarnja klasa je klasa koja je deklarirana unutar metode, ali je neimenovana. Anonimna unutarnja klasa ima nekoliko ograničenja koja je čine različitom od normalne klase, uključujući ograničenje opsega varijabli kojima može pristupiti. Postoje neke vrlo specifične situacije u kojima korištenje anonimne unutarnje klase može učiniti izvorni kod čitljivijim, ali se prvenstveno koristi za pomoć u provedbi enkapsulacije gdje bi stvaranje zasebnih klasa to moglo zakomplicirati.

Enkapsulacija je koncept u objektno orijentiranom programiranju (OOP) prema kojem objekt i njegove komponente trebaju biti na neki način zaštićeni i vezani za objekt. Anonimne unutarnje klase, i unutarnje klase općenito, pomažu u realizaciji enkapsulacije za posebno složene objekte. Umjesto da mora stvoriti klasu koja se oslanja na zasebnu vanjsku, umjetno ih vežući i potencijalno razotkrivajući neke od komponenti, anonimna unutarnja klasa može te dvije čvrsto povezati.

U nekim programskim jezicima anonimna unutarnja klasa može pomoći u prevladavanju ograničenja pojedinačnog nasljeđivanja. Ako objekt nasljeđuje od jedne klase, ali onda treba pristupiti drugoj, unutarnja klasa može se generirati u hodu i zatim proslijediti odgovarajućim rukovaocima. Ova tehnika je uobičajena kod povratnih poziva i slušatelja događaja. Jedina alternativa bila bi stvaranje cijele druge klase u kojoj su samo jedna ili dvije metode nadjačane.

Anonimne unutarnje klase imaju određena ograničenja kako bi spriječili probijanje enkapsulacije i nametnuli opseg. Primarno ograničenje je da anonimna unutarnja klasa ne može pristupiti varijablama metode u kojoj se nalazi osim ako te varijable nisu deklarirane kao konačne. To je zato što bi unutarnja klasa mogla nastaviti funkcionirati nakon života klase i metode u kojoj se ugnijezdi. Varijable klase omatanja bile bi uništene nakon što je njezin život završio, tako da bi reference koje je unutarnja klasa držala odmah postale nevažeće. Jedina iznimka od ovoga je konačna varijabla, jer će postojati izvan instance.

Jedna od specifičnijih upotreba anonimne unutarnje klase je zaštita koda. Mnogi OOP jezici pružaju mehanizam koji se naziva refleksija. Reflekcija omogućuje programu da secira drugu klasu i vidi koje su varijable i metode njezinih članova, ali ne i sam kod. Korištenjem anonimne unutarnje klase, sadržaj unutarnje klase je zaštićen od refleksije, a unutarnje djelovanje veće klase može se učinkovito sakriti.