Gerçekte ne olur (yani derleyicinin sınıflardan ürettiği şey) - 1

"Merhaba Amigo! İşte senin için biraz daha bilgi."

"Size zaten derleyicinin aslında tüm anonim sınıfları sıradan iç sınıflara dönüştürdüğünü söyledim."

"Evet. Adlarının sayı olduğunu bile hatırlıyorum: 1, 2, 3, vs."

"Kesinlikle. Ama burada başka bir nüans daha var."

"Bir sınıf, bir yöntemin içinde bildirilirse ve değişkenlerinden herhangi birini kullanırsa, bu değişkenlere yapılan başvurular oluşturulan sınıfa eklenir. Kendiniz görün."

"Bununla başlıyoruz:"

Derlemeden önce:
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;
 }
}

"Ve derleyici şunu üretir:

Derledikten sonra:
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;
  }
 }
}

"Anladın mı? İç sınıf, yöntemin yerel değişkenini değiştiremez, çünkü iç sınıfın kodu yürütüldüğünde, yöntemden tamamen çıkmış olabiliriz."

"Şimdi ikinci nokta. toString() yöntemi geçirilen bir değişkeni kullanır. Bunu gerçekleştirmek için yapılması gerekenler:"

A) oluşturulan sınıfın içine kaydedin

B) yapıcıya ekleyin.

"Anladım. Yöntemler içinde bildirilen sınıflar her zaman değişkenlerin kopyalarını kullanır."

"Kesinlikle!"

"O zaman değişkenlerin neden nihai olması gerektiği ve neden değiştirilemeyecekleri anlaşılır. Orijinaller yerine kopyalarla çalışıyorsanız, kullanıcı değişkenlerin değerlerini neden değiştiremediğini anlamayacaktır; Bu, onun onları değiştirmesini yasaklamamız gerektiği anlamına geliyor."

"Doğru, değişkenleri nihai olarak bildirmek, derleyicinin sizin için bir sınıf oluşturması, bunu yönteme iletmesi ve yöntemin kullanmak istediğiniz tüm değişkenlerini kaydetmesi karşılığında ödenmesi gereken küçük bir bedel gibi görünüyor."

"Katılıyorum. İsimsiz yerel sınıflar hâlâ çok havalı."

"Bir yöntemin içinde yerel bir sınıf bildirirsem ve yöntemin değişkenlerini onun içinde kullanırsam, derleyici bunları da sınıfa ekler mi?"

"Evet, onları sınıfa ve kurucusuna ekleyecek."

"Bende böyle düşünmüştüm."