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

Implementação do método no construtor

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"));
7 respostas

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?

solução!

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!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software