Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Dúvidas sobre a sintaxe Lambda

new Thread(() -> System.out.println("Executando um Runnable")).start();

Boa noite pessoal! Minha dúvida é porque não precisou colocar nenhuma variável dentro do parâmetro (dentro dos parênteses do lado esquerdo da flecha (->) ??

Por exemplo:

List<String> palavras = new ArrayList<>();
        palavras.add("alura online");
        palavras.add("casa do código");
        palavras.add("caelum");

        palavras.forEach(consumidor -> System.out.print("[" + consumidor + "] "));

Neste exemplo, foi colocado uma variável antes da flecha (->). Então porque no primeiro exemplo não precisou?

Obrigado!

2 respostas
solução

É porque, você está utilizando um Construtor do Objeto Thread, ele espera que você passe um objeto Runnable, ai por convenção foi adotado essa sintaxe, o Java sabe que é um Runnable então você informa só o () como se tivesse instânciando um Runnable() e o código que será executado. Dai como não tem parâmetro nenhum que vai ser utilizado dentro do código que será executado, só os () mesmo.

Têm outras formas de fazer a mesma coisa, essa que você postou é a mais "enxuta":


public class Teste {

    public static void main(String[] args) {

        new Thread(new MostraPrint()).start();

    }
}

class MostraPrint implements Runnable{

    @Override
    public void run() {
        System.out.println("Executando um Runnable");

    }

}
public class Teste {

    public static void main(String[] args) {

        new Thread(new Runnable() {
            public void run() {
               System.out.println("Executando um Runnable");
            }
        }).start();

    }
}
        new Thread(() -> {
            System.out.println("Executando um Runnable");
        }).start();

Esclarecido a minha dúvida. Obrigado!