Vad är en anonym klass?
Vid objektorienterad datorprogrammering är en anonym innerklass en klass som förklaras inuti en metod men som inte heter. En anonym inre klass har flera begränsningar som gör att den skiljer sig från en vanlig klass, inklusive en begränsning i omfattningen av variablerna den kan komma åt. Det finns några mycket specifika situationer där användning av en anonym innerklass kan göra källkoden mer läsbar, men den används främst för att upprätthålla inkapsling där generering av separata klasser kan komplicera den.
Inkapsling är begreppet i objektorienterad programmering (OOP) att ett objekt och dess komponenter på något sätt ska skyddas och bundna till objektet. Anonyma inre klasser och inre klasser i allmänhet hjälper till att förverkliga kapsling för särskilt komplexa föremål. I stället för att behöva skapa en klass som förlitar sig på en separat extern klass, som binder dem konstgjorda och potentiellt exponerar några av komponenterna, kan en anonym innerklass binda de två solidt.
I vissa programmeringsspråk kan en anonym inre klass hjälpa till att övervinna begränsningarna för enstaka arv. Om ett objekt ärver från en klass men sedan måste få åtkomst till en annan, kan en inre klass genereras i farten och sedan skickas till lämpliga hanterare. Den här tekniken är vanligt med återuppringningar och evenemanglyssnare. Det enda alternativet skulle vara att skapa en hel andra klass där endast en eller två metoder åsidosätts.
Anonyma inre klasser har vissa begränsningar för att förhindra att kapsling bryts in och för att verkställa omfattningen. Den primära begränsningen är att en anonym inre klass inte kan få åtkomst till variabler i den metod där den befinner sig om inte dessa variabler förklaras som slutgiltiga. Detta beror på att den inre klassen kan fortsätta att fungera utöver den klass och metod där den bo. Variablerna i omslagsklassen skulle förstöras när dess liv var över, så referenserna som den inre klassen innehöll skulle omedelbart bli ogiltiga. Det enda undantaget från detta är en slutlig variabel, eftersom den kommer att existera bortom förekomsten.
En av de mer specifika användningarna för en anonym innerklass är kodskydd. Många OOP-språk tillhandahåller en mekanism som kallas reflektion. Reflektion tillåter ett program att dissekera en annan klass och se vad dess medlemsvariabler och metoder är, men inte själva koden. Genom att använda en anonym inre klass skyddas innehållet i den inre klassen från reflektion och den större klassens inre funktioner kan effektivt döljas.