Em ritmo de Carnaval, vamos falar de Classe Anônima? Vou criar um Objeto anônimo para esse Baile de Máscaras.
- #Java
Salve, turma. Hoje, você aprenderá sobre classe anônima.
Escolhi essa bela mascarada da foto, para representar a criação de algo, que não se sabe o nome, e utilizá-lo como se existisse? Faz sentido para você? haha
Então, vamos a um exemplo:
Normalmente, declaramos objetos assim: Pessoa olival = new Pessoa();
Acho que até aqui tudo bem, não é mesmo?!
Agora, imagine, que você tem um construtor que aceita outro objeto, tal como:
public Pessoa(String nome, Endereco endereco) {
this.nome = nome;
this.endereco = endereco;
}
Acredito que está tudo bem até aqui, certo? Afinal, estamos utilizando nomes para os objetos.
Agora, veja como seria se esse construtor recebesse um objeto anônimo, no momento da instanciação de um objeto pessoa, que recebe os parâmetros nome e um objeto endereço:
public static void main(String args[]) {
Pessoa olival = new Pessoa("olival paulino", new Endereco("alagoas", "palmeira", "57603130"));
}
Se você notou, no lugar de instanciar um objeto do tipo endereço separado, para utilizá-lo depois, informando o seu nome, neste construtor acima, eu já o instanciei sem precisar informar o nome.
Legal, né?! Ou não rsrs
Isso é classe anônima. Para simplificar, você pode pensar como se fosse um new, dentro de outro new, ou melhor dizendo, quando você cria um objeto, informando o nome, e ele requisita um objeto, você não precisa declarar uma variável para isso, informando o nome dela.
É só instanciar com new e pronto. Um objeto anônimo nasce.
A turma gosta muito de utilizar esse conceito quando se trabalha com arrays de objetos, como por exemplo:
ArrayList<String> listaDeNomes = new ArrayList<String>() {
add("olival");
add("pedro");
add("marilia");
};
Ou seja, o código acima substitui a seguinte implementação:
ArrayList<String> listaDeNomes = new ArrayList<String>();
listaDeNomes.add("olival");
listaDeNomes.add("pedro");
listaDeNomes.add("marilia");
Ou seja, para que eu preciso informar o nome de um objeto, se eu já sei o que vou fazer com ele? Neste caso, do ArrayList de nomes, o que eu queria fazer era adicionar três elementos com o método add(). Logo, se eu posso fazer isso sem informar o nome do objeto, então... Por que não fazê-lo?
Mas, você deve estar se pergunta: Por que eu devo usar isso? Quais os benefícios?
Afinal, o código pode ficar mais complexo, não é mesmo?!
O principal motivo é flexibilidade. Você cria códigos rapidamente, desde que entenda deste conceito.
Mas, não é algo obrigatório, pois, você usa de acordo com a sua necessidade. Elas são usadas para criação de objetos temporários em tempo de execução. São usadas mais dentro de construtores e métodos.
Elas também são usadas para mudar comportamentos ou sobrescrevê-los, de um classe que já existe. Aí, já viu né?! Isso envolve encapsulamento e sobrescrita. É algo útil. Depois que aprende, fica fácil de usar.
Quando eu vi isso a primeira vez, a mente até bugou um pouco. Mas, agora, é algo que é fácil de aplicar. Mas, é sempre assim, não é mesmo? O novo assusta, causa um certo desconforto e rejeição a usar, e depois de um tempo, você se adapta e está utilizando.
Espero que esse conteúdo destrave sua mente e se gerou um desconforto, entenda... é algo aceitável neste primeiro momento. Depois, a utilização virá.
LinkedIn: https://www.linkedin.com/in/olivalpaulino/
Bons estudos.