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);
}
});
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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);
}
});
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!