আসলে কি ঘটে (অর্থাৎ কম্পাইলার ক্লাস থেকে কি তৈরি করে) - 1

"হাই, অ্যামিগো! এখানে আপনার জন্য আরও কিছু তথ্য আছে।"

"আমি ইতিমধ্যেই আপনাকে বলেছি যে কম্পাইলার আসলে সমস্ত বেনামী ক্লাসকে সাধারণ অভ্যন্তরীণ ক্লাসে রূপান্তর করে।"

"হ্যাঁ। এমনকি আমার মনে আছে যে তাদের নাম হল সংখ্যা: 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() পদ্ধতি একটি পাস ভেরিয়েবল ব্যবহার করে। এটি সম্পন্ন করার জন্য, এটি প্রয়োজনীয় ছিল:"

ক) উত্পন্ন শ্রেণীর ভিতরে এটি সংরক্ষণ করুন

খ) কনস্ট্রাক্টরে যোগ করুন।

"বুঝলাম। অভ্যন্তরীণ পদ্ধতিতে ঘোষিত ক্লাস সবসময় ভেরিয়েবলের কপি ব্যবহার করে।"

"ঠিক!"

"তাহলে এটা বোঝা যায় কেন ভেরিয়েবল চূড়ান্ত হতে হবে। এবং কেন সেগুলি পরিবর্তন করা যাবে না। আপনি যদি আসল না হয়ে কপি নিয়ে কাজ করেন, তাহলে ব্যবহারকারী বুঝতে পারবেন না কেন তিনি ভেরিয়েবলের মান পরিবর্তন করতে পারবেন না, যা মানে আমাদের শুধু তাকে এগুলি পরিবর্তন করা থেকে নিষেধ করতে হবে।"

"ঠিক আছে, ভেরিয়েবলকে চূড়ান্ত হিসাবে ঘোষণা করা একটি ছোট মূল্য বলে মনে হয় বিনিময়ে কম্পাইলার আপনার জন্য একটি ক্লাস তৈরি করে, এটিকে পদ্ধতিতে পাস করুন এবং আপনি যে পদ্ধতির ভেরিয়েবলগুলি ব্যবহার করতে চান সেগুলি সংরক্ষণ করুন।"

"আমি একমত। বেনামী স্থানীয় ক্লাস এখনও খুব ভালো।"

"যদি আমি একটি পদ্ধতির ভিতরে একটি স্থানীয় ক্লাস ঘোষণা করি এবং আমি এতে পদ্ধতির ভেরিয়েবল ব্যবহার করি, তাহলে কম্পাইলার কি সেগুলিকেও ক্লাসে যুক্ত করবে?"

"হ্যাঁ, এটি তাদের ক্লাস এবং এর কনস্ট্রাক্টরে যুক্ত করবে।"

"আমি যা ভেবেছিলাম."