Clases locales: clases dentro de métodos - 1

"¡Hola, amigo!"

"Otro temacito minúsculo son las clases locales ".

"Como ha visto, puede crear clases no solo en archivos separados, sino también dentro de otras clases. Pero eso no es todo. Las clases también se pueden crear dentro de los métodos. Estas clases se denominan clases locales. Funcionan como clases internas ordinarias, pero se pueden usar dentro de los métodos en los que se declaran".

"Mira a la pantalla:"

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

"¿Y por qué necesitamos tales clases?"

"Poner una clase, con todos sus constructores y métodos, dentro de un método no hace que el código sea muy legible, ¿no crees?"

"Exactamente. Tienes toda la razón."

"También puede usar clases internas anónimas dentro de los métodos. Pero estas clases tienen una pequeña ventaja y, en consecuencia, se usan dentro de los métodos con bastante frecuencia".

"Una clase declarada dentro de un método puede usar las variables locales de ese método:"

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

"Pero hay una limitación: las variables son de "solo lectura", no se pueden cambiar".

"Esta es la razón por la que existe esa restricción:"

"Las clases declaradas dentro de un método solo pueden acceder a las variables de un método que se declaran con la palabra clave final. En el ejemplo anterior, puede ver que no puedo asignar de inmediato el valor de i a policeNumber. En su lugar, primero lo guardo en el número variable final".

"Ser capaz de usar las variables de un método es genial. Espero apreciarlo adecuadamente. Sin embargo, es una lástima que no puedas cambiar las variables".

"Ellie te explicará hoy por qué no puedes cambiarlos. Mientras tanto, voy a tomar una siesta de una hora".

"Buenas noches, Kim. Gracias por la interesante lección".