Wat is een anonieme binnenklasse?
In objectgeoriënteerde computerprogrammering is een anonieme binnenklasse een klasse die binnen een methode wordt gedeclareerd maar niet genoemd wordt. Een anonieme binnenklasse heeft verschillende beperkingen die hem anders maken dan een normale klasse, waaronder een beperking van het bereik van de variabelen waartoe ze toegang heeft. Er zijn enkele zeer specifieke situaties waarin het gebruik van een anonieme binnenklasse de broncode leesbaarder kan maken, maar het wordt voornamelijk gebruikt om inkapseling af te dwingen waar het genereren van afzonderlijke klassen dit kan bemoeilijken.
Inkapseling is het concept in object-georiënteerd programmeren (OOP) dat een object en zijn componenten op een of andere manier beschermd en gebonden moeten zijn aan het object. Anonieme binnenklassen, en binnenklassen in het algemeen, helpen om inkapseling voor bijzonder complexe objecten te realiseren. In plaats van een klasse te moeten maken die afhankelijk is van een externe klasse, ze kunstmatig aan elkaar te binden en mogelijk enkele componenten bloot te leggen, kan een anonieme binnenklasse de twee stevig met elkaar verbinden.
In sommige programmeertalen kan een anonieme binnenklasse helpen om de beperkingen van een enkele erfenis te overwinnen. Als een object van de ene klasse overneemt, maar vervolgens toegang moet krijgen tot een andere, kan een interne klasse direct worden gegenereerd en vervolgens worden doorgegeven aan de juiste handlers. Deze techniek is gebruikelijk bij callbacks en gebeurtenisluisteraars. Het enige alternatief zou zijn om een hele tweede klasse te maken waarin slechts een of twee methoden worden genegeerd.
Anonieme binnenklassen hebben enkele beperkingen om inkapseling te voorkomen en om de reikwijdte af te dwingen. De primaire beperking is dat een anonieme binnenklasse geen toegang heeft tot variabelen van de methode waarin deze zich bevindt, tenzij die variabelen als definitief worden verklaard. Dit komt omdat de innerlijke klasse zou kunnen blijven functioneren na het leven van de klasse en de methode waarin hij nestelt. De variabelen van de inpakklasse zouden vernietigd worden zodra het leven voorbij was, dus de referenties van de binnenklasse zouden onmiddellijk ongeldig worden. De enige uitzondering hierop is een laatste variabele, omdat deze buiten de instantie zal bestaan.
Een van de meer specifieke toepassingen voor een anonieme binnenklasse is codebescherming. Veel OOP-talen bieden een mechanisme dat reflectie wordt genoemd. Met Reflectie kan een programma een andere klasse ontleden en zien wat de lidvariabelen en -methoden zijn, maar niet de code zelf. Door een anonieme binnenklasse te gebruiken, wordt de inhoud van de binnenklasse beschermd tegen reflectie en kan de innerlijke werking van de grotere klasse effectief worden verborgen.