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.