2010-07-14 26 views
21

acabo de descubrir las clases locales en Java:¿Cuándo debería usar una clase local en Java?

public final class LocalClassTest 
{ 
    public static void main(final String[] args) { 
    for(int i = 10; i > 0; i--) { 
     // Local class definition--declaring a new class local to the for-loop 
     class DecrementingCounter { 
     private int m_countFrom; 

     public DecrementingCounter(final int p_countFrom) { 
      m_countFrom = p_countFrom; 
     } 

     public void count() { 
      for (int c = m_countFrom; c > 0; c--) { 
      System.out.print(c + " "); 
      } 
      System.out.println(); 
     } 
     } 

     // Use the local class 
     DecrementingCounter dc = new DecrementingCounter(i); 
     dc.count(); 
    } 
    } 
} 

me llegó a través de este comentario: Advantages of Local Classes que se enumeran algunas grandes ventajas de las clases locales sobre las clases internas anónimas.

Mi pregunta es, no parece que haya muchos casos en los que esta técnica tenga ventajas sobre las clases internas NO anónimas. Lo que quiero decir es: usarías una clase local si tu clase solo es útil dentro del alcance de un método. Pero cuando sus métodos llegan al punto en que son tan complejos que necesita comenzar a definir clases personalizadas dentro de ellos, probablemente ya sean demasiado complejos y deban dividirse. En ese momento, tu clase local debería convertirse en una clase interna, ¿verdad?

¿Cuáles son algunos ejemplos de cuándo las clases locales son más deseables que las clases internas, que no involucran métodos supercomplejos (que deben evitarse)?

+6

AAHHHHH ... me duelen los ojos. :) – limc

+9

clase local declarada en el ciclo ???? ¿estas loco? No tiene que hacer eso ya que su clase no accede a ninguna de las variables locales de los bucles. Esta clase puede ser incluso externa fácilmente –

+5

@eugener: Bueno, supongo que debería declararse fuera del ciclo, pero es un ejemplo artificial que igualmente parece absurdo ... –

Respuesta

8

La clase local es algo utilizado en algún método particular y en ningún otro lugar.

Permítanme dar un ejemplo, utilicé una clase local en mi decodificador/codificador JPEG, cuando leo configuraciones del archivo que determinarán más procesos de decodificación. Se veía así:

class DecodeConfig { 
    int compId; 
    int dcTableId; 
    int acTableId; 
} 

Básicamente se trata de sólo tres int s agrupados. Necesitaba una variedad de configuraciones, por eso no podía usar solo una clase anónima. Si hubiera estado codificando en C, habría usado una estructura.

Podría hacer esto con una clase interna, pero todo el proceso de decodificación se maneja en un solo método y no necesito usar configuraciones en ningún otro lado. Es por eso que una clase local sería suficiente.

Esto es, por supuesto, el ejemplo más básico, pero es de la vida real.

+0

Estoy seguro de que tiene su razonamiento para este enfoque, pero si solo está filmando para la estructura de C, ¿no sería una solución más adecuada usar Enum? – limc

+0

Enum no funcionará, leo todos los valores del archivo y no forman un conjunto predefinido de valores. También necesito agrupar tres parámetros diferentes y no estoy seguro de cómo las enumeraciones podrían ayudarme a hacer eso. – Malcolm

+0

¿Por qué eligió hacer de esta "struct" una clase local en lugar de una clase interna privada? ¿Fue usado solo dentro de un solo método? ¿Cuán complejo diría que fue el método? –

Cuestiones relacionadas