Local classes em Java

Acho que um dos recursos mais desconhecidos da linguagem é a existência das local classes. Local classes são classes definidas dentro de métodos ou blocos em geral, algo como:

public void umMetodo() throws InterruptedException {
    class LocalRunnable implements Runnable {
       private UmBean umBean;

       public void run() {
           umBean = variavelPrivada.fazAlgoLento();
       }

       public UmBean getUmBean() {
          return umBean;
       }
    }

    LocalRunnable lr = new LocalRunnable();
    Thread t = new Thread(lr);
    t.start();

    try {
       t.join();
    } catch (InterruptedException ie) {
       throw ie;
    }

    return lr.getUmBean();
}

No exemplo acima, criamos uma implementação de Runnable que permite obter, após a execução do método run(), o valor computado de uma operação lenta (ok, fora permitir que a thread atual possa ser interrompida enquanto o método executa, não há lá grandes vantagens em criar uma thread para esperar imediatamente pelo seu resultado).

Muitas vezes cria-se uma inner class “nomeada” apenas para ter acesso a alguns métodos adicionais, visto que não é possível chamar normalmente um método de uma anonymous inner class. As local classes resolvem justamente esse problema, como o exemplo acima demonstra.

E você, conhecia esse recurso? Mais informações na JLS.

Comments are closed.