2011-01-12 18 views
104

Ho una classe di grandi dimensioni (circa 40 metodi) che fa parte di un pacchetto che invierò come corso del corso. Attualmente, i metodi sono piuttosto confusi in termini di utilità pubblica/privata ecc. E voglio ordinarli in modo ragionevole. C'è un modo standard per farlo? Per esempio. normalmente i campi sono elencati prima dei metodi, i costruttori sono elencati prima di altri metodi e i getter/setter durano; per quanto riguarda i restanti metodi?Esistono convenzioni per l'ordinazione dei metodi Java?

+0

Si noti inoltre che quando _working_ con codice come questo, la maggior parte degli IDE permettono di vedere la definizione di ciò che è sotto il cursore automaticamente. Questo significa che non devi fare altro che un'occhiata. –

risposta

84

Alcune convenzioni elencano prima tutti i metodi pubblici e poi tutti quelli privati. Ciò significa che è facile separare l'API dall'implementazione, anche quando non è coinvolta un'interfaccia, se si capisce cosa intendo.

Un'altra idea è quella di raggruppare i metodi correlati insieme: ciò semplifica l'individuazione delle giunzioni in cui è possibile suddividere la classe esistente esistente in diverse più piccole e più mirate.

+1

+1. Preferisco ordinare per visibilità. Vergogna Eclipse non può farlo automaticamente (raggrupperà sempre tutti i costruttori insieme e tutti i metodi insieme). – finnw

+12

@finnw, presenta un bug report. Da lì è stato possibile attuare cose più strane. –

10

40 metodi in una singola classe sono un po 'troppo.

Avrebbe senso spostare alcune delle funzionalità in altre classi, opportunamente denominate. Quindi è molto più facile dare un senso.

Quando ne hai di meno, è molto più facile elencarli in un ordine di lettura naturale. Un paradigma frequente è quello di elencare le cose prima del o dopo il di cui hai bisogno, nell'ordine in cui ne hai bisogno.

Questo di solito significa che main() va sopra o sotto.

+1

sei così giusto - questo non è un problema di ordinazione – kostja

+4

Non hai sempre una scelta, ad esempio se stai implementando un'interfaccia con molti metodi. – finnw

+5

Questa è un'attività Android, quindi ci sono molte cose che semplicemente non possono andare da nessuna parte, 'onPause()', 'onResume()' ecc., Così come tutti i miei campi 'OnClickListener', che, sebbene siano campi, non guardare o comportarsi come loro, quindi è ragionevole elencarli separatamente. – fredley

1

Si sta utilizzando Eclipse? Se è così, rimarrò con l'ordinamento dei membri predefinito, perché probabilmente è più familiare a chiunque legga il tuo codice (anche se non è il mio preferito).

10

La mia "convenzione": statica prima dell'istanza, pubblica prima privato, costruttore prima dei metodi, ma metodo principale in basso (se presente).

11

Non sono sicuro che ci sia uno standard universalmente accettato, ma le mie preferenze personali sono;

  • costruttori primi
  • metodi statici prossimi, se v'è un metodo main, sempre prima di altri metodi statici
  • metodi non statici prossimo, di solito in ordine di importanza del metodo seguito mediante qualsiasi metodo che chiamate. Ciò significa che i metodi pubblici che chiamano altri metodi di classe apparire verso i metodi migliori e privati ​​che richiedono altri metodi di solito finiscono verso le
  • metodi standard inferiori come toString, equals e hashcode prossimi
  • getter e setter hanno un posto speciale Right Reserved in fondo alla classe
+0

Preferisco davvero i costruttori alla fine perché un costruttore correttamente scritto dovrebbe fare ben poco oltre ad assegnare i suoi argomenti alle proprietà. – GordonM

27

il legame più precisa di «convenzioni Codice»: «Class and Interface Declarations»

+5

+1, afaik - questo è l'UNICO post che in realtà risponde alla domanda. Sì, esiste un ordine standard dettato da Oracle e Sun: 1. commento pubblico, 2. classe, 3. commento interno, 4. dati statici, 5. dati di istanza, 6. cori, 7. metodi e all'interno di ciascun gruppo di sezioni logicamente, non per accessibilità. –

+0

@VadimKirilchuk «Internet Archive» era giù ... –

+1

http://www.oracle.com/technetwork/java/codeconvtoc-136057.html –

73
  1. Class (variabili statiche): prima le variabili di classe pubblica, quindi la protetta e quindi la privata.

  2. Variabili di istanza: prima pubblica, quindi protetta, quindi privata.

  3. Costruttori

  4. Metodi: Questi metodi devono essere raggruppate per funzionalità piuttosto che dalla portata o l'accessibilità. Ad esempio, un metodo di classe privata può trovarsi tra due metodi di istanza pubblici. L'obiettivo è di rendere la lettura e la comprensione del codice più semplice.

Fonte: http://www.oracle.com/technetwork/java/codeconventions-141855.html

+4

Questo è 15 anni e probabilmente un po 'obsoleto con l'aspetto dei moderni IDE ... – assylias

+7

@assylias: IMO, la leggibilità è indipendente dall'IDE. Mantenere pubblico prima privato è generalmente migliore. – saurabheights

2

Inoltre, Eclipse offre la possibilità di ordinare i membri della classe per voi, se li per qualche motivo mischiato:

Aprire il file di classe, il via alla "Fonte "nel menu principale e selezionare" Ordina membri ".

presi da qui: Sorting methods in Eclipse

Problemi correlati