DEV Community

Java Efetivo (livro)
Java Efetivo (livro)

Posted on

1

Item 64: Referencie os objetos através das interfaces deles

Preferência por interfaces como tipos de referência:
Se uma interface adequada existir, você deve referenciar objetos por meio dela em vez da classe concreta.
Isso se aplica a parâmetros, valores de retorno, variáveis e campos.

Flexibilidade ao usar interfaces:
Usar interfaces permite trocar a implementação sem afetar o código.
Exemplo: trocando de LinkedHashSet para HashSet ou TreeSet, basta alterar o construtor.

Quando NÃO usar interfaces:
Funcionalidade específica da implementação:
Se uma implementação oferece algo não exigido pela interface (ex.: LinkedHashSet garante ordem de iteração, mas HashSet não).

Sem uma interface apropriada:
Algumas classes como String ou BigInteger não têm interfaces equivalentes e devem ser usadas diretamente.

Frameworks baseados em classes:
Exemplo: OutputStream no pacote java.io é referenciado por meio de uma classe abstrata, não uma interface.

Métodos específicos da implementação:
Exemplo: PriorityQueue implementa Queue, mas tem um método comparator() não presente em Queue. Só use a classe se precisar desse método extra.

Benefício:
Usar interfaces torna o programa mais flexível e modular, permitindo alterar implementações facilmente sem quebrar o código existente.

Exemplos de Código
Bom exemplo: Usar interface como tipo

Set<String> s = new LinkedHashSet<>();

Enter fullscreen mode Exit fullscreen mode

Mau exemplo: Usar a classe concreta como tipo

LinkedHashSet<String> s = new LinkedHashSet<>();

Enter fullscreen mode Exit fullscreen mode

Flexibilidade: Alterando a implementação sem afetar o código

Set<String> s = new TreeSet<>();

Enter fullscreen mode Exit fullscreen mode

Exemplo de uso de uma classe final como String

String str = "Hello";

Enter fullscreen mode Exit fullscreen mode

Exemplo de uso de classe base de um framework

OutputStream output = new FileOutputStream("file.txt");

Enter fullscreen mode Exit fullscreen mode

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit

Top comments (0)

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay