Um guia para interfaces internas em Java

Um guia para interfaces internas em Java

1. Introdução

Neste breve tutorial, veremos interfaces internas em Java. Eles são usados ​​principalmente para:

  • resolvendo o problema de namespacing quando a interface tem um nome comum

  • encapsulamento crescente

  • aumentando a legibilidade agrupando interfaces relacionadas em um único local

Um exemplo bem conhecido é a interfaceEntry que é declarada dentro da interfaceMap. Definida dessa forma, a interface não está no escopo global e é referenciada comoMap.Entry diferenciando-a de outras interfacesEntry e tornando óbvia sua relação comMap.

2. Interfaces internas

Por definição, a declaração de uma interface interna ocorre no corpo de outra interface ou classe.

Eles são implicitamente públicos e estáticos, assim como seus campos, quando declarados em outra interface (semelhante às declarações de campo nas interfaces de nível superior) e podem ser implementados em qualquer lugar:

public interface Customer {
    // ...
    interface List {
        // ...
    }
}

Inner interfaces declared within another class are also static, mas eles podem ter especificadores de acesso que podem restringir onde eles podem ser implementados:

public class Customer {
    public interface List {
        void add(Customer customer);
        String getCustomerNames();
    }
    // ...
}

No exemplo acima, temos uma interfaceList que servirá para declarar algumas operações na lista deCustomers, como adicionar novas, obter uma representaçãoString e assim por diante.

List é um nome predominante e para trabalhar com outras bibliotecas que definem essa interface, precisamos separar nossa declaração, ou seja,namespace.

É aqui que usamos uma interface interna se não quisermos usar um novo nome comoCustomerList.

Também mantivemos duas interfaces relacionadas juntas, o que melhora o encapsulamento.

Por fim, podemos continuar com a implementação:

public class CommaSeparatedCustomers implements Customer.List {
    // ...
}

3. Conclusão

Examinamos rapidamente as interfaces internas em Java.

Como sempre, as amostras de código podem ser encontradasover on GitHub.