Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

New em Interface ?

Pessoal, no código abaixo não entendi como é possível dar new em uma interface.

palavras.forEach(new Consumer<String>(){
    public void accept(String palavra) {
        System.out.println(palavra);
    }
});
2 respostas
solução!

Oie Alex, tudo bem com você?

O "new" está sendo utilizado nesse caso pois você está criando uma classe anônima que está implementando a interface "Consumer". Você pode ver como usar as classes anônimas olhando diretamente a documentação (Está em inglês).

Segue outro exemplo usando uma classe anônima:

Consumer<String> consumidor = new Consumer<String>() {
    @Override
        public void accept(String s) {
            System.out.println(s);
        }
    };

palavras.forEach(consumidor);

Importante ressaltar que usar o "new" para implementação de uma interface só pode ser usado em classes anônimas. Em outros casos o "new" não poderá ser usado já que em Java as interfaces nunca podem ser instanciadas, entretanto é possível referir-se a um objeto que implementa uma interface, segue o exemplo abaixo:

public interface TesteInterface {
}
public class Teste implements TesteInterface{
}

public class TesteObjeto {
    public static void main(String[] args) {
            TesteInterface teste = new Teste(); //compila
            //TesteInterface test = new TesteInterface (); // não compila
    }
}

Espero que eu tenha ajudado, qualquer dúvida ou problema fico a disposição :)

Bons estudos!

Entendi Igor, o mesmo new que não pode ser utilizado para instanciar uma interface, pode ser utilizado para instanciar uma classe anônima. Agradeço a explicação. Um abraço!