Helyi osztályok: metódusokon belüli osztályok - 1

– Szia Amigo!

"Egy másik kis apró téma a helyi órák ."

"Mint láthattad, nemcsak külön fájlokban, hanem más osztályokon belül is létrehozhatsz osztályokat. De ez még nem minden. Osztályokat lehet metódusokon belül is létrehozni. Ezeket az osztályokat helyi osztályoknak nevezzük. Úgy működnek, mint a közönséges belső osztályok, de használhatók a deklarált módszereken belül."

"Nézd a képernyőt:"

Példa
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;
 }
}

– És miért van szükségünk ilyen órákra?

"Ha egy osztályt a konstruktoraival és metódusaival együtt egy metódusba helyezünk, az nem tesz túl jól olvasható kódot, nem gondolod?

– Pontosan. Teljesen igazad van.

"Anonim belső osztályokat is használhat a metódusokon belül. De ezeknek az osztályoknak van egy kis előnyük, következésképpen a metódusokon belül gyakran használják őket."

"Egy metóduson belül deklarált osztály használhatja a metódus helyi változóit:"

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;
 }
}

"De van egy korlátozás: a változók «csak olvashatóak» – nem változtathatók meg.

"Íme, miért létezik ez a korlátozás:"

"A metóduson belül deklarált osztályok csak a metódus final kulcsszóval deklarált változóihoz férhetnek hozzá. A fenti példában látható, hogy nem tudom azonnal hozzárendelni az i értékét a policeNumber-hez. Ehelyett először elmentem a végső változószám."

"A metódusok változóinak használata nagyon klassz. Remélem, megfelelően értékelem. Kár, hogy nem tudod megváltoztatni a változókat."

"Ellie ma elmagyarázza neked, miért nem tudod megváltoztatni őket. Közben megyek aludni egy órára."

"Jó éjszakát, Kim. Köszönöm az érdekes leckét."