Skip to main content

O que é uma classe interna anônima?

Na programação de computadores orientada a objetos, uma classe interna anônima é uma classe declarada dentro de um método, mas sem nome. Uma classe interna anônima possui várias restrições que a diferenciam de uma classe normal, incluindo uma restrição no escopo das variáveis ​​que pode acessar. Existem algumas situações muito específicas nas quais o uso de uma classe interna anônima pode tornar o código-fonte mais legível, mas é usado principalmente para ajudar a reforçar o encapsulamento, onde a geração de classes separadas pode complicá-lo.

Encapsulamento é o conceito na programação orientada a objetos (OOP) de que um objeto e seus componentes devem, de alguma forma, ser protegidos e vinculados ao objeto. Classes internas anônimas e classes internas em geral ajudam a obter o encapsulamento para objetos particularmente complexos. Em vez de ter que criar uma classe que se baseie em uma externa separada, unindo-as artificialmente e potencialmente expondo alguns componentes, uma classe interna anônima pode amarrar as duas juntas solidamente.

Em algumas linguagens de programação, uma classe interna anônima pode ajudar a superar as restrições da herança única. Se um objeto herda de uma classe, mas precisa acessar outra, uma classe interna pode ser gerada rapidamente e depois passada para os manipuladores apropriados. Essa técnica é comum com retornos de chamada e ouvintes de eventos. A única alternativa seria criar uma segunda classe inteira na qual apenas um ou dois métodos são substituídos.

As classes internas anônimas possuem algumas restrições para impedir a quebra do encapsulamento e reforçar o escopo. A restrição principal é que uma classe interna anônima não pode acessar variáveis ​​do método em que reside, a menos que essas variáveis ​​sejam declaradas como finais. Isso ocorre porque a classe interna pode continuar funcionando além da vida da classe e do método em que se aninha. As variáveis ​​da classe de empacotamento seriam destruídas assim que sua vida terminasse, portanto as referências que a classe interna mantinha se tornariam instantaneamente inválidas. A única exceção a isso é uma variável final, porque ela existirá além da instância.

Um dos usos mais específicos para uma classe interna anônima é a proteção de código. Muitas linguagens OOP fornecem um mecanismo chamado reflexão. O Reflection permite que um programa disseca outra classe e veja quais são suas variáveis ​​e métodos membros, mas não o próprio código. Ao usar uma classe interna anônima, o conteúdo da classe interna é protegido da reflexão e o funcionamento interno da classe maior pode ser efetivamente oculto.