DEV Community

Cover image for Quando usar Classes aninhadas, classes locais, classes anônimas e expressões lambdas
Carolina Dias Fonseca
Carolina Dias Fonseca

Posted on • Updated on

Quando usar Classes aninhadas, classes locais, classes anônimas e expressões lambdas

Classe aninhada

O Java te permite definir uma classe dentro de outra. Exemplo:

class ClasseExterna {
    ...
    class ClasseAninhada {
        ...
    }
}
Enter fullscreen mode Exit fullscreen mode

Classes aninhadas te permitem ter lógica de grupo de classes que vocês está utilizando em um único lugar, o ponto positivo é que esse tipo de recurso aumento o encapsulamento, cria um código mais legível e melhora a manutenção do código.

Já as classes locais, classes anônimas e expressões lambdas também dão os mesmo benefícios, porém são recomendadas para usos mais específicos.

Classe local

Classes locais são aquelas que você define dentro do bloco. Você normalmente encontra classes locais definidas dentro de corpo de métodos.

public class ExemploClasseLocal {

    static String regularExpression = "[^0-9]";

        //Método que precisamos
    public static void validarTelefone(
        String telefone1, String telefone2) {

        final int tamanhoTelefone = 10;

                //Criamos uma classe para poder implementar a lógica de validação do telefone
        class NumeroTelefone {

            String numeroTelefoneFormatado = null;

            PhoneNumber(String numeroTelefone){

                String numeroAtual = numeroTelefone.replaceAll(
                  regularExpression, "");
                if (numeroAtual.length() == tamanhoTelefone)
                    numeroTelefoneFormatado = numeroAtual;
                else
                    numeroTelefoneFormatado = null;
            }

            public String getNumero() {
                return numeroTelefoneFormatado;
            }


        NumeroTelefone numero1 = new NumeroTelefone(telefone1);
        NumeroTelefone numero2 = new NumeroTelefone(telefone2);

        if (numero1.getNumero() == null) 
            System.out.println("Primeiro número é inválido");
        else
            System.out.println("Primeiro número é " + numero1.getNumero());
        if (numero2.getNumber() == null)
            System.out.println("Segundo número é inválido");
        else
            System.out.println("Segundo número é  " + numero2.getNumero());

    }

        //Chamando o nosso método de validação de telefone
    public static void main(String... args) {
        validarTelefone("123-456-7890", "456-7890");
    }
}
Enter fullscreen mode Exit fullscreen mode

Use caso você precise criar mais de uma instância da classe, acessar seu construtor ou criar um novo.

Classe Anônima

Use caso você precise declarar campos ou adicionar métodos.

Expressão Lambda

Use caso você esteja encapsulando um único comportamento que você quer passar para outro trecho de código. Por exemplo, você pode usar expressão lambda se você quer que determinada ação performe em cada elemento de uma collection quando o processo está completo ou quando o processo encontra algum erro.

Você também pode usar caso precise de uma única instância de uma interface funcional e você não precisa de nada muito completo (exemplo: você não precisa de construtor, um nome tipado, campos ou métodos adicionais).

Fonte traduzida livremente: https://docs.oracle.com/javase/tutorial/java/javaOO/whentouse.html

Discussion (1)

Collapse
boirods profile image
Rodrigo Régio

Nossa alguém falando de Java no Brasil kkk muito bom seus posts, li uns 3 e gostei de todos que li, breve tentarei ler todos os seus. Parabéns e continue trazendo mais coisas de Java e relacionados...