2010-07-14 13 views
21

Ho appena scoperto classi locali in Java:Quando si dovrebbe usare una classe locale in 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(); 
    } 
    } 
} 

ho incontrato questo commento: Advantages of Local Classes che ha elencato alcuni grandi vantaggi delle classi locali oltre classi interne anonime.

La mia domanda è, non sembra che ci sarebbero molti casi in cui questa tecnica avrebbe vantaggi rispetto alle classi interne NON anonimi. Quello che voglio dire è: usereste una classe locale se la vostra classe è utile solo nell'ambito di un metodo. Ma quando i tuoi metodi arrivano al punto di essere così complessi, devi iniziare a definire classi personalizzate all'interno di essi, probabilmente sono già troppo complessi e devono essere suddivisi. A quel punto, la tua classe locale dovrebbe diventare una classe interiore, giusto?

Quali sono alcuni esempi di quando le classi locali sono più desiderabili delle classi interne, che non includono metodi super-complessi (che dovrebbero essere evitati)?

+6

AAHHHHH ... mi fanno male gli occhi. :) – limc

+9

classe locale dichiarata nel ciclo ???? sei pazzo? Non è necessario farlo poiché la classe non accede a nessuno dei loop variabili locali. Questa classe può anche essere esterna facilmente –

+5

@eugener: Beh, suppongo che dovrebbe essere dichiarata al di fuori del ciclo, ma è un esempio forzato che sembra ugualmente assurdo in entrambi i modi ... –

risposta

8

La classe locale è qualcosa usata in qualche metodo particolare e da nessun'altra parte.

Consentitemi di fornire un esempio, ho utilizzato una classe locale nel mio decodificatore/codificatore JPEG, quando leggo le configurazioni dal file che determineranno un ulteriore processo di decodifica. Si presentava così:

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

Fondamentalmente si tratta di soli tre int s raggruppati insieme. Avevo bisogno di una serie di configurazioni, ecco perché non potevo usare solo una classe anonima. Se avessi programmato in C, avrei usato una struttura.

Potrei farlo con una classe interna, ma tutto il processo di decodifica è gestito in un unico metodo e non ho bisogno di usare le configurazioni da nessun'altra parte. Ecco perché una classe locale sarebbe sufficiente.

Questo è, ovviamente, l'esempio più semplice, ma è dalla vita reale.

+0

Sono sicuro che hai il tuo ragionamento per questo approccio, ma se stai girando solo per la struttura di C, non usare Enum sarebbe una soluzione più corretta? – limc

+0

Enum non farà il trucco, leggo tutti i valori dal file e non formano un insieme predefinito di valori. Inoltre ho bisogno di raggruppare tre diversi parametri e non sono sicuro di come le enumerazioni potrebbero aiutarmi a farlo. – Malcolm

+0

Perché hai scelto di rendere questa "struct" una classe locale invece di una classe interna privata? Era usato solo all'interno di un singolo metodo? Quanto complesso diresti che fosse il metodo? –

Problemi correlati