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

Não compila quando tento usar a variavel socket dentro de uma classe anônima

Segui passo a passo o vídeo, mas quando eu tentei usar a variável "socket" dentro da implementação da classe anônima com Runnable(como foi feito pelo professor) meu código não compila("Cannot refer to the non-final local variable socket defined in an enclosing scope"), e me obriga a definir o socket como final para funcionar corretamente.

Eu até acredito que seja correto não funcionar, porque uma classe anônima define um novo contexto, Mas então por que no vídeo funciona? utilizo java 1.7 seria esse o motivo?

public static void main(String[] args) throws Exception {

        Socket socket = new Socket("localhost", 12345);

        System.out.println("Conexão Estabelecida");

        Thread threadEnviaComando = new Thread(new Runnable() {

            @Override
            public void run() {

                try {
                    System.out.println("Pode enviar comandos!");
                    // não consigo usar essa variável socket da forma como é feito no exemplo
                    PrintStream saida = new PrintStream(
                            socket.getOutputStream());
2 respostas
solução!

Olá Jonas

Classes anonimas não podem acessar variaveis locais do escopo de fora que nao sejam final! Voce precisa colocar final Socket socket = new Socket.... e vai resolver. No Java 8 ele consegue inferir que voce nao esta mudando o valor da variavel e voce nem precisaria fazer isso.

é me parece que esse Java 8 está bem inteligente mesmo :)

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