खरोखर काय होते (म्हणजे कंपाइलर क्लासेसमधून काय निर्माण करतो) - १

"हाय, अमिगो! तुमच्यासाठी आणखी काही माहिती आहे."

"मी तुम्हाला आधीच सांगितले आहे की कंपाइलर प्रत्यक्षात सर्व अनामित वर्गांना सामान्य आतील वर्गांमध्ये रूपांतरित करतो."

"हो. मला आठवते की त्यांची नावे क्रमांक आहेत: 1, 2, 3, इ."

"नक्की. पण इथे आणखी एक बारकावे आहे."

"जर एखाद्या मेथडमध्ये क्लास घोषित केला असेल आणि त्यातील कोणतेही व्हेरिएबल्स वापरत असतील, तर त्या व्हेरिएबल्सचे संदर्भ जनरेट केलेल्या क्लासमध्ये जोडले जातील. तुम्हीच पहा."

"आम्ही यापासून सुरुवात करतो:"

संकलित करण्यापूर्वी:
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;
 }
}

"आणि कंपाइलर हे व्युत्पन्न करतो:

संकलित केल्यानंतर:
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;
  }
 }
}

"तुम्हाला मुद्दा समजला का? आतील वर्ग पद्धतीचे स्थानिक व्हेरिएबल बदलू शकत नाही, कारण आतील वर्गाचा कोड अंमलात येईपर्यंत, आम्ही पद्धत पूर्णपणे सोडून देत असू."

"आता दुसरा मुद्दा. toString() पद्धत पास व्हेरिएबल वापरते. हे पूर्ण करण्यासाठी, हे करणे आवश्यक होते:"

अ) व्युत्पन्न केलेल्या वर्गात सेव्ह करा

ब) ते कन्स्ट्रक्टरमध्ये जोडा.

"समजले. आतील पद्धती घोषित केलेले वर्ग नेहमी व्हेरिएबल्सच्या प्रती वापरतात."

"नक्की!"

"मग व्हेरिएबल्स अंतिम का असले पाहिजेत हे समजते. आणि ते का बदलले जाऊ शकत नाहीत. जर तुम्ही मूळ ऐवजी कॉपीसह काम करत असाल, तर वापरकर्त्याला समजणार नाही की तो व्हेरिएबल्सची मूल्ये का बदलू शकत नाही, जे म्हणजे आपण त्याला बदलण्यापासून मनाई केली पाहिजे."

"बरोबर, व्हेरिएबल्सला अंतिम म्हणून घोषित करणे म्हणजे कंपाइलरने तुमच्यासाठी क्लास तयार केल्यामुळे, ते मेथडमध्ये पास करा आणि तुम्हाला वापरायचे असलेले सर्व मेथड व्हेरिएबल्स सेव्ह करा याच्या बदल्यात अदा करावी लागेल असे वाटते."

"मी सहमत आहे. निनावी स्थानिक वर्ग अजूनही मस्त आहेत."

"मी जर एखाद्या पद्धतीमध्ये स्थानिक वर्ग घोषित केला आणि मी त्या पद्धतीचे व्हेरिएबल्स वापरत असे, तर कंपायलर त्यांना वर्गात जोडेल का?"

"होय, ते त्यांना वर्ग आणि त्याच्या कन्स्ट्रक्टरमध्ये जोडेल."

"तेच मला वाटलं होत."