Lokala klasser: klasser i metoder - 1

"Hej, Amigo!"

"Ett annat litet ämne är lokala klasser ."

"Som du har sett kan du skapa klasser inte bara i separata filer, utan även i andra klasser. Men det är inte allt. Klasser kan också skapas inom metoder. Dessa klasser kallas lokala klasser. De fungerar som vanliga inre klasser, men de kan användas inom de metoder som de är deklarerade i."

"Kolla på skärmen:"

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

"Och varför behöver vi sådana klasser?"

"Att placera en klass, med alla dess konstruktörer och metoder, i en metod ger inte särskilt läsbar kod, eller hur?"

"Precis. Du har helt rätt."

"Du kan också använda anonyma inre klasser inuti metoder. Men dessa klasser har en liten fördel, och följaktligen används de inuti metoder ganska ofta."

"En klass som deklareras inom en metod kan använda den metodens lokala 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 finns en begränsning: variablerna är "skrivskyddade" - de kan inte ändras."

"Här är anledningen till att begränsningen finns:"

"Klasser som deklareras inom en metod kan bara komma åt en metods variabler som deklareras med nyckelordet final. I exemplet ovan kan du se att jag inte direkt kan tilldela värdet av i till policeNumber. Istället sparar jag det först till slutlig variabelnummer."

"Att kunna använda en metods variabler är superkul. Jag hoppas att jag uppskattar det ordentligt. Det är synd att du inte kan ändra variabler dock."

"Ellie kommer att förklara för dig idag varför du inte kan byta dem. Under tiden ska jag gå och ta en tupplur i ungefär en timme."

"God natt, Kim. Tack för den intressanta lektionen."