DEV Community

Cover image for Expressão Lambda - Parte I (Classes anônimas)
Carolina Dias Fonseca
Carolina Dias Fonseca

Posted on • Updated on

Expressão Lambda - Parte I (Classes anônimas)

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();
    }            
}
Enter fullscreen mode Exit fullscreen mode

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);
            }
        };
Enter fullscreen mode Exit fullscreen mode

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

Oldest comments (2)

Collapse
 
andreluisbarreto profile image
Andre Barreto

Sensacional!

Collapse
 
belo355 profile image
Edilson Belo

top !\