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)

Duvida Aula 04 exercicio 04

class A {
        public static void main(String[] args) {
            for(int i = 0; i < 10; i++){
                new Thread(() -> System.out.println(i)).start();
            }
        }
    }

Alguém sabe me explicar por que ocorre erro de compilação e o que seria preciso fazer para corrigir e conseguir executar o sysout naquela linha?

2 respostas
solução

Ola Guylherme,

Como a variável i não é final (seu valor se altera, com as iterações do laço) o compilador não permite que ela seja acessada no escopo da função anônima passada via Lambda Expression.

Uma forma de resolver o "problema" seria criar uma variável final dentro do laço que recebe o valor de i, e acessar essa variável final na expressão lambda. Como a variável final dentro do laço é redefinida a cada iteração o acesso seria permitido e com os valores corretos pra cada momento. Pode ser uma forma de contornar o problema de compilação. (Ou uma gambiarra pra muitos =P, mas ok )

Espero ter ajudado. Abraço.

Testei a sua solução e compilou perfeitamente. Agradeço a ajuda

for(int i = 0; i < 10; i++){
            final int j = i;
            new Thread(() -> System.out.println(j)).start();
        }