2011-01-18 5 views
35

Alcuni potrebbero voler dire che questo è un candidato per il problema meno importante di tutti i tempi. Tuttavia, lo stile del codice è un argomento molto importante per me, e voglio assicurarmi di scrivere codice in modo leggibile - per me e la maggior parte degli sviluppatori.Dove mettere le classi interne?

Ecco perché mi sto chiedendo dove state dichiarando le vostre classi interne.

Sto seguendo il seguente schema metodo di ordinamento, perché è abbastanza comune:

public void foo() { 
    usedByFoo(); 
} 

private void usedByFoo() { 
} 

public void bar() { 
} 

li ordino da cima a fondo, ogni metodo il più vicino al punto in cui viene utilizzato.

Ora ho potuto fare lo stesso con le classi interne, in questo modo:

class Outer { 
    private Inner inner; 

    private class Inner {}; 

    public Outer() { 
    } 

    ... 
} 

Penso che questo è lo stile più coerente da seguire per me, ma ho anche visto le persone spesso dichiarare tutte le classi interne sia nella parte superiore o nella parte inferiore del file.

Quale stile dovrei seguire, dato il mio modo di ordinare i metodi? Qual è il modo più comune per farlo?

+1

Mi sento come lo stile del codice è troppo soggettivo ... forse mi sbaglio comunque. Basta documentare le cose. –

+1

Forse questo appartiene di più su http://programmers.stackexchange.com/ –

+0

@Amir Sì, le domande in stile di programmazione prosperano Lì, –

risposta

42

Vorrei dichiarare le inner-class nella parte inferiore del file - di solito non ti interessa le loro implementazioni e vuoi solo arrivare ai metodi della tua classe principale, quindi non dovrebbero intralciarti.

+6

aggiungerei che se ci sono così tante classi interne che diventa confuso, è il momento di ridimensionarne alcune nelle classi di primo livello. – biziclop

+0

Un bel po 'di upvotes e nessuna altra risposta, indovina che è la strada da percorrere quindi, grazie! –

9

Il mio stile preferito è metterli ovunque sembrino avere più senso. Di solito questo è in fondo quindi sono fuori strada, ma a volte trovo più sensato metterli davanti ad un certo gruppo di metodi (se questi sono i metodi che usano la classe interna).

Se il la classe diventa troppo ingombrante con un sacco di metodi e classi interne, probabilmente è una cattiva scelta di design (la coesione è troppo bassa). A volte ho lasciato che le classi andassero in questo modo per caso e sono orribili da affrontare più tardi - in questi giorni se Riesco a vederne uno andando in quel modo, in genere lo rifatterò, forse anche nel suo pacchetto. Se arrivi al punto in cui hai così tante classi interne che non sai cosa fare con loro, prenderei questo approccio. C'è anche qualcuno che sconsiglia di usare le classi interne per questo motivo (anche se non sono d'accordo - sono una risorsa preziosa se usate correttamente, devi solo fare attenzione a non sfuggirle.