Ano talaga ang nangyayari (ibig sabihin, kung ano ang nabuo ng compiler mula sa mga klase) - 1

"Hi, Amigo! Narito ang ilang karagdagang impormasyon para sa iyo."

"Sinabi ko na sa iyo na talagang kino-convert ng compiler ang lahat ng anonymous na klase sa mga ordinaryong panloob na klase."

"Yep. I even remember na ang mga pangalan nila ay number: 1, 2, 3, etc."

"Exactly. Pero may ibang nuance dito."

"Kung ang isang klase ay idineklara sa loob ng isang pamamaraan at gumagamit ng alinman sa mga variable nito, ang mga sanggunian sa mga variable na iyon ay idaragdag sa nabuong klase. Tingnan mo mismo."

"Simulan natin ito:"

Bago i-compile:
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;
 }
}

"At ang compiler ay bumubuo nito:

Pagkatapos i-compile:
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;
  }
 }
}

"Nakuha mo ba ang punto? Hindi mababago ng inner class ang lokal na variable ng method, dahil sa oras na maisakatuparan ang code ng inner class, maaaring tuluyan na nating lalabas ang method."

"Ngayon ang pangalawang punto. Ang toString() na paraan ay gumagamit ng isang naipasa na variable. Upang magawa ito, kinakailangan na:"

A) i-save ito sa loob ng nabuong klase

B) idagdag ito sa constructor.

"Nakuha ko. Ang mga klase na ipinahayag sa loob ng mga pamamaraan ay palaging gumagamit ng mga kopya ng mga variable."

"Eksakto!"

"Kung gayon, makatuwiran kung bakit dapat na pinal ang mga variable. At kung bakit hindi mababago ang mga ito. Kung aktwal kang nagtatrabaho sa mga kopya kaysa sa mga orihinal, hindi mauunawaan ng user kung bakit hindi niya mababago ang mga halaga ng mga variable, na Ibig sabihin kailangan lang natin siyang pagbawalan na baguhin ang mga ito."

"Tama, ang pagdedeklara ng mga variable bilang pangwakas ay tila isang maliit na presyo na babayaran kapalit ng pagkakaroon ng compiler na bumuo ng isang klase para sa iyo, ipasa ito sa pamamaraan, at i-save ang lahat ng mga variable ng pamamaraan na gusto mong gamitin."

"Sumasang-ayon ako. Anonymous local classes are still super cool."

"Kung idedeklara ko ang isang lokal na klase sa loob ng isang pamamaraan, at gagamitin ko ang mga variable ng pamamaraan sa loob nito, idaragdag din ba sila ng compiler sa klase?"

"Oo, idadagdag sila nito sa klase at sa constructor nito."

"Iyon ang naisip ko."