Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Classe anônima

Porque foi possível dar um new na interface Comparator dando a impressão que é possível instanciar uma interface?

1 resposta
solução!

Você nunca pode instanciar uma interface, mas pode criar uma classe interna anônima que as pessoas às vezes confundem com instanciar uma interface.

Aqui está um exemplo:

Runnable é uma interface, então não posso simplesmente dizer

Runnable run = new Runnable();

como o método run da interface não foi implementado, você não pode criar um objeto diretamente dessa interface.

No entanto, posso criar um objeto que implemente Runnable on the fly, fornecendo a implementação do método run in-line:

Runnable run = new Runnable() {public void run(){…}};

PS: No Java 8 ou posterior, você pode tornar o código ainda mais simples usando lambdas….

Runnable run = () -> {…};

Java pode dizer que a expressão lambada é destinada à implementação do método run, porque Runnable é uma interface funcional (por exemplo, define apenas um método abstrato).

Super recomendo que você faça esse curso para entender melhor essa questão de classes anônimas em Java 8: https://www.alura.com.br/curso-online-java8-lambdas

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software