Amigos, desculpe a ignorância, mas por que nesse exemplo, implementa-se o método run da classe Runnable no construtor? Existiria uma outra forma de se fazer isso?
Thread thread = new Thread(() -> System.out.println("Executando um Runnable"));
Amigos, desculpe a ignorância, mas por que nesse exemplo, implementa-se o método run da classe Runnable no construtor? Existiria uma outra forma de se fazer isso?
Thread thread = new Thread(() -> System.out.println("Executando um Runnable"));
Boa tarde, Matheus! Como vai?
Na realidade a expressão () -> System.out.println("Executando um Runnable")
é o que se chama de lambda! E está representando todo o objeto do tipo Runnable
e não apenas o método run()
. Seria o mesmo que criar uma classe anônima desse jeito:
Thread thread = new Thread(new Runnable() {
public void run() {
System.out.println("Executando um Runnable");
}
});
Pegou a ideia? Qualquer coisa é só falar!
Grande abraço e bons estudos!
Obrigado, Gabriel. Mas por exemplo, nesse caso:
Eu possuo uma interface funcional e, como posso fazer para não usar uma instância dela? Segue abaixo, o código:
InterfaceUpperCaseString interfaceLambda = (palavra -> {
System.out.println("Teste Lambda");
return palavra.toUpperCase();
});
System.out.println(interfaceLambda.tudoPraMaiusculo("Java 8 - lambda"));
Eu queria algo desse tipo, não usando a instância da classe anônima numa variável:
System.out.println(new InterfaceUpperCaseString (palavra -> {
System.out.println("Teste Lambda");
return palavra.toUpperCase();
}));
Porque é assim que acontece nesse exemplo aqui:
Thread thread = new Thread(() -> System.out.println("Executando um Runnable"));
Matheus, vc não vai conseguir fazer com o System.out.println()
a mesma coisa que foi feita com o new Thread()
. Isso se deve ao fato do System.out.println()
não receber como parâmetro uma interface funcional e sim um Object
.
Entendi, o conceito estava um pouco nebuloso na minha mente. Então a classe Thread possui um construtor que recebe como parâmetro uma interface funcional?
Exato! Uma interface funcional é aquela que tem apenas um método que deve ser obrigatoriamente implementado por quem assinar essa interface! No caso, a classe Thread
recebe como parâmetro do construtor um objeto da interface Runnable
que é uma interface que define apenas o método run()
a ser implementado. Embora essa interface não tenha surgido junto com as interfaces funcionais do Java 8, ela pode ser considerada assim pois se enquadra na definição!
Ok, muito obrigado Gabriel Leite!
Por nada, Matheus! Sempre que tiver qualquer dúvida é só mandar aqui no fórum!
Grande abraço e bons estudos!