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);
}
});
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!