Lokale klasser: klasser i metoder - 1

"Hei, Amigo!"

"Et annet lite tema er lokale klasser ."

"Som du har sett, kan du lage klasser ikke bare i separate filer, men også inne i andre klasser. Men det er ikke alt. Klasser kan også opprettes innenfor metoder. Disse klassene kalles lokale klasser. De fungerer som vanlige indre klasser, men de kan brukes innenfor metodene de er deklarert i."

"Se på skjermen:"

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

"Og hvorfor trenger vi slike klasser?"

"Å sette en klasse, med alle dens konstruktører og metoder, inne i en metode gir ikke veldig lesbar kode, tror du ikke?"

"Akkurat. Du har helt rett."

"Du kan også bruke anonyme indre klasser i metoder. Men disse klassene har en liten fordel, og følgelig brukes de i metoder ganske ofte."

"En klasse deklarert i en metode kan bruke den metodens lokale variabler:"

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

"Men det er en begrensning: variablene er «skrivebeskyttet» - de kan ikke endres."

"Her er grunnen til at begrensningen eksisterer:"

"Klasser deklarert i en metode kan bare få tilgang til en metodes variabler som er deklarert ved hjelp av nøkkelordet final. I eksemplet ovenfor kan du se at jeg ikke umiddelbart kan tilordne verdien av i til policeNumber. I stedet lagrer jeg den først til endelig variabelnummer."

"Å kunne bruke en metodes variabler er superkult. Jeg håper jeg setter pris på det. Det er synd at du ikke kan endre variabler."

"Ellie skal forklare deg i dag hvorfor du ikke kan endre dem. I mellomtiden skal jeg ta en lur i omtrent en time."

"God natt, Kim. Takk for den interessante leksjonen."