Mikä on anonyymi sisäluokka?

Objektisuuntautuneessa tietokoneohjelmoinnissa anonyymi sisäluokka on luokka, joka on ilmoitettu metodin sisällä, mutta on nimetön. Nimetön sisäinen luokka sisältää useita rajoituksia, jotka erottavat sen normaalista luokasta, mukaan lukien rajoitukset sen muuttujien laajuudelle, joita se voi käyttää. Joissakin hyvin erityisissä tilanteissa nimettömän sisäisen luokan käyttäminen voi tehdä lähdekoodista luettavamman, mutta sitä käytetään ensisijaisesti kapseloinnin täytäntöönpanon helpottamiseen, jos erillisten luokkien luominen voi vaikeuttaa sitä.

Kapselointi on olio-ohjelmoinnin (OOP) käsite, jonka mukaan objekti ja sen komponentit on jollain tavalla suojattava ja sidottava kohteeseen. Anonyymit sisäluokat ja yleensä sisäluokat auttavat toteuttamaan kapseloinnin erityisen monimutkaisille kohteille. Sen sijaan, että joutuisi luomaan luokan, joka perustuu erilliseen ulkoiseen luokkaan, sitomalla ne yhteen keinotekoisesti ja mahdollisesti paljastamalla joitain komponentteja, anonyymi sisäluokka voi sitoa nämä kaksi kiinteästi yhteen.

Joillakin ohjelmointikielillä anonyymi sisäluokka voi auttaa voittamaan yksittäisen perinnön rajoitukset. Jos kohde periytyy yhdestä luokasta, mutta sen on sitten päästävä toiseen luokkaan, sisäinen luokka voidaan luoda lennossa ja siirtää sitten asianmukaisille käsittelijöille. Tämä tekniikka on yleinen takaisinsoittojen ja tapahtumakuuntelijoiden kanssa. Ainoa vaihtoehto olisi luoda koko toinen luokka, jossa vain yksi tai kaksi menetelmää ohitetaan.

Anonyymeillä sisäluokilla on joitakin rajoituksia, jotka estävät koteloinnin rikkoutumisen ja valvovat laajuutta. Ensisijainen rajoitus on, että anonyymi sisäinen luokka ei voi käyttää sen aseman menetelmän muuttujia, ellei näitä muuttujia julisteta lopullisiksi. Tämä johtuu siitä, että sisäinen luokka voi jatkaa toimintaansa sen luokan ja menetelmän ulkopuolella, jossa se pesii. Käärintäluokan muuttujat tuhoutuisivat sen käyttöiän päätyttyä, joten sisäisen luokan hallussa olevat viittaukset muuttuisivat heti pätemättömiksi. Ainoa poikkeus tähän on lopullinen muuttuja, koska se on esiintymän ulkopuolella.

Yksi nimettömän sisäisen luokan tarkemmista käyttötarkoituksista on koodisuojaus. Monet OOP -kielet tarjoavat mekanismin, jota kutsutaan heijastukseksi. Reflection mahdollistaa ohjelman erottaa toisen luokan ja nähdä, mitkä sen jäsenmuuttujat ja -menetelmät ovat, mutta ei itse koodi. Käyttämällä anonyymiä sisäluokkaa sisäisen luokan sisältö suojataan heijastuksilta ja suuremman luokan sisäinen toiminta voidaan tehokkaasti piilottaa.