Classe aninhada
O Java te permite definir uma classe dentro de outra. Exemplo:
class ClasseExterna {
...
class ClasseAninhada {
...
}
}
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");
}
}
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
Top comments (1)
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...