Dúvida Classes Internas e variaveis de metodo [RESOLVIDO]

3 respostas
Jiraiya

Bom dia, boa tarde, boa noite…(ai vai do horário de cada um…rs)

Agora falando serio

Então galera, faz um tempinho comecei a estudar para a scjp, é minha primeira leitura do livro da Kathy, mas já estou indo a fundo com os estudos( estudando por 6hrs ~ 9hrs, fazendo exercícios e relendo resumos).Contudo cheguei no capitulo sobre classes internas, mais precisamente na parte sobre “Classes internas locais método”… e fiquei com uma “pulga atrás da orelha” nessa parte “O que um objeto local de método pode ou não fazer”

É dito que mesmo depos que o método é concluido o objeto da classe ainda pode estar ativo no heap, e que as como as variáveis locais não tem garantia de continuarem ativas, portanto o objeto da classe interna não pode usa-las. A menos que essas variáveis locais sejam marcadas como final.

Entendo que final faz com que a variável seja imutavel, então apenas isso torna-a utilizavel para a classe interna???

Ou o final faz com que a variável se torne “garantidamente” ativa no heap???

Grato desde já.

3 Respostas

joaopaulolobo

Mormius

q tal ir trabalhar um pouco ? :twisted:

wellsantos

Fiiii

Cada vez que tu chama uma função pode passar um parâmetro diferente, certo?!
Então! Cada inner class que vc criar vai ter que enxergar o valor que
tava na variável que vc usou exatamente na hora que vc criar a inner class.

Como vc acha que a JVM faz isso?
É claro que ela cria uma cópia do valor da variável!
Por isso a variável tem de ser final. Pois se vc alterá-la, não
vai refletir na cópia que a JVM fez. E a sua inner class
usa sempre a cópia feita pela JVM.

Veja que o modificador final em si não faz nada.
É só pra indicar pra vc que não poderá alterar uma
variável que é usada por uma inner class de método.

Todavia, se precisar de variavel que possa ser alterada,
basta criar campos dentro da inner class.

public Handler getHandlerFor(String name, final int value){

        final String key = name + "-" +value;

        return new Handler() {
          
            @Override
            public int execute() {
                return mainScope.get(key) * 1000 + value;
            }
            
        };
    }

[]'s

Jiraiya

joaopaulolobo…nao tenho culpa de tre acabado com tudo…hehe ^^

Well valeu a resposta cara

Criado 14 de outubro de 2009
Ultima resposta 19 de out. de 2009
Respostas 3
Participantes 3