Estudando um pouco sobre Expressão Lambda em Java, acabei caindo na documentação e, consequentemente, li sobre Classe Anônima.
Achei legal e resolvi traduzir e tentar resumir:
Classes anônimas te permitem criar um código mais conciso. Elas te permitem declarar e instanciar uma classe ao mesmo tempo.
Elas são como classes locais exceto pelo fato de que elas não possuem nome.
Recomenda-se que você as utilize caso precise de uma classe local uma única vez.
Declarando uma classe anônima
Enquanto classes locais são classes declaradas, as classes anônimas são expressões o que significa que você define a classe em outra expressão.
Exemplo:
public class HelloWorldAnonymousClasses {
interface HelloWorld {
public void greet();
public void greetSomeone(String someone);
}
public void sayHello() {
class EnglishGreeting implements HelloWorld {
String name = "world";
public void greet() {
greetSomeone("world");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Hello " + name);
}
}
//classe declarada na inicialização
HelloWorld englishGreeting = new EnglishGreeting();
//classe anônima na inicialização da variável frenchGreeting
HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde";
public void greet() {
greetSomeone("tout le monde");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Salut " + name);
}
};
//classe anônima na inicialização da variável frenchGreeting
HelloWorld spanishGreeting = new HelloWorld() {
String name = "mundo";
public void greet() {
greetSomeone("mundo");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Hola, " + name);
}
};
//Mesmo efeito no final das constas
englishGreeting.greet();
frenchGreeting.greetSomeone("Fred");
spanishGreeting.greet();
}
public static void main(String... args) {
HelloWorldAnonymousClasses myApp =
new HelloWorldAnonymousClasses();
myApp.sayHello();
}
}
Sintaxe da classe anônima
Como já mencionado anteriormente, uma classe anônima é uma expressão.
A sintaxe de uma classe anônima é igual a invocação de um construtor, exceto pela definição contida no bloco de código.
Considere a instância do objeto frenchGreeting:
HelloWorld frenchGreeting = new HelloWorld() {
String name = "tout le monde";
public void greet() {
greetSomeone("tout le monde");
}
public void greetSomeone(String someone) {
name = someone;
System.out.println("Salut " + name);
}
};
A classe anônima consiste no seguinte:
- O operador
new
- O nome de uma interface para implementar ou para estender. No exemplo anterior, a classe anônima está implementando a interface HelloWorld.
- Parênteses que contém os argumentos para um construtor, exatamente igual a instância de uma classe normal. Nota: Quando você implementa uma interface, não tem construtor, então você só usa um par de parênteses igual ao exemplo.
- Um corpo onde se faz a declaração do corpo da classe. Mais especificamente, no corpo, declaração de método são permitidos porém declarações não.
Considerando que a definição de uma classe anônima é ser uma expressão, ela tem que ser parte de uma variável.
Fonte: Documentação Java
Top comments (2)
Sensacional!
top !\