Klasy lokalne: klasy wewnątrz metod - 1

"Cześć, Amigo!"

„Kolejnym drobnym tematem są zajęcia lokalne ”.

„Jak widziałeś, możesz tworzyć klasy nie tylko w oddzielnych plikach, ale także wewnątrz innych klas. Ale to nie wszystko. Klasy można również tworzyć w ramach metod. Te klasy nazywane są klasami lokalnymi. Działają jak zwykłe klasy wewnętrzne, ale mogą być używane w ramach metod, w których zostały zadeklarowane."

"Spójrz na ekran:"

Przykład
class Car
{
 public ArrayListcreatePoliceCars(int count)
 {
  ArrayList result = new ArrayList();

  class PoliceCar extends Car
  {
   int policeNumber;
   PoliceCar(int policeNumber)
  {
   this.policeNumber = policeNumber;
  }
 }

 for(int i = 0; i < count; i++)
     result.add(new PoliceCar(i));
  return result;
 }
}

„A po co nam takie zajęcia?”

„Umieszczenie klasy ze wszystkimi jej konstruktorami i metodami wewnątrz metody nie zapewnia zbyt czytelnego kodu, nie sądzisz?”

„Dokładnie. Masz absolutną rację”.

„Możesz także używać anonimowych klas wewnętrznych wewnątrz metod. Ale te klasy mają jedną małą zaletę, w związku z czym są dość często używane wewnątrz metod”.

„Klasa zadeklarowana w metodzie może używać zmiennych lokalnych tej metody:”

class Car
{
 public ArrayListcreatePoliceCars(int count)
 {
  ArrayList result = new ArrayList();

  for(int i = 0; i < count; i++)
  {
   final int number = i;
   result.add(new Car()
  {
   int policeNumber = number;
  });
 }
  return result;
 }
}

„Ale jest jedno ograniczenie: zmienne są «tylko do odczytu» — nie można ich zmienić”.

„Oto dlaczego istnieje to ograniczenie:”

„Klasy zadeklarowane w metodzie mają dostęp tylko do zmiennych metody zadeklarowanych przy użyciu słowa kluczowego final. W powyższym przykładzie widać, że nie mogę od razu przypisać wartości i do numeru policji. Zamiast tego najpierw zapisuję go w końcowy numer zmiennej”.

„Możliwość używania zmiennych metody jest super fajna. Mam nadzieję, że to odpowiednio docenię. Szkoda jednak, że nie można zmieniać zmiennych”.

„Ellie wyjaśni ci dzisiaj, dlaczego nie możesz ich zmienić. Tymczasem ja idę się zdrzemnąć przez około godzinę”.

„Dobranoc, Kim. Dzięki za interesującą lekcję”.