CodeGym /Cursos /Java multitarefa /O que realmente acontece (ou seja, o que o compilador ger...

O que realmente acontece (ou seja, o que o compilador gera a partir das classes)

Java multitarefa
Nível 4 , Lição 7
Disponível
O que realmente acontece (ou seja, o que o compilador gera a partir das classes) - 1

"Oi, amigo! Aqui estão mais algumas informações para você."

"Eu já disse a você que o compilador na verdade converte todas as classes anônimas em classes internas comuns."

"Sim. Eu até me lembro que seus nomes são números: 1, 2, 3, etc."

"Exatamente. Mas há outra nuance aqui."

"Se uma classe for declarada dentro de um método e usar qualquer uma de suas variáveis, as referências a essas variáveis ​​serão adicionadas à classe gerada. Veja você mesmo."

"Começamos com isso:"

Antes de compilar:
class Car {
 public ArrayList createPoliceCars(int count) { ArrayList result = new ArrayList(); for(int i = 0; i < count; i++) { final int number = i; result.add(new Car() { public String toString() { return ""+number; } }); } return result; }
}

"E o compilador gera isso:

Depois de compilar:
class Car {
 public ArrayList createPoliceCars(int count) { ArrayList result = new ArrayList(); for(int i = 0; i < count; i++) { final int number = i; result.add(new Anonymous2 (number)); } return result; }

 class Anonymous2 { final int number; Anonymous2(int number) { this.number = number; } public String toString() { return ""+ number; } }
}

"Você entendeu? A classe interna não pode alterar a variável local do método, porque no momento em que o código da classe interna é executado, podemos estar saindo do método completamente."

"Agora o segundo ponto. O método toString() usa uma variável passada. Para isso, foi necessário:"

A) salve-o dentro da classe gerada

B) adicioná-lo ao construtor.

"Entendi. Classes declaradas dentro de métodos sempre usam cópias de variáveis."

"Exatamente!"

"Então faz sentido por que as variáveis ​​devem ser finais. E por que elas não podem ser alteradas. Se você estiver realmente trabalhando com cópias em vez dos originais, o usuário não entenderá por que ele não pode alterar os valores das variáveis, que significa que precisamos apenas proibi-lo de alterá-los."

"Certo, declarar variáveis ​​como finais parece um pequeno preço a pagar em troca de fazer com que o compilador gere uma classe para você, passe-a para o método e salve todas as variáveis ​​do método que você deseja usar."

"Eu concordo. Aulas locais anônimas ainda são super legais."

"Se eu declarar uma classe local dentro de um método e usar as variáveis ​​do método nele, o compilador as adicionará à classe também?"

"Sim, ele irá adicioná-los à classe e seu construtor."

"Isso foi o que eu pensei."

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION