Czy są jakieś konwencje zamawiania metod Java? [zamknięte]

Mam dużą klasę (około 40 metod), która jest częścią pakietu, który złożę jako kurs-praca. Obecnie metody są dość pomieszane pod względem użyteczności publicznej / prywatnej itp. i chcę je zamówić w rozsądny sposób. Czy jest na to standardowy sposób? Np. normalnie pola są wypisywane przed metodami, konstruktory są wypisywane przed innymi metodami, a gettery / settery są ostatnie; co z pozostałymi metodami?

Author: fredley, 2011-01-12

8 answers

Niektóre konwencje wymieniają najpierw wszystkie metody publiczne, a potem wszystkie prywatne - oznacza to, że łatwo jest oddzielić API od implementacji, nawet jeśli nie ma interfejsu, jeśli widzisz, co mam na myśli.

Innym pomysłem jest grupowanie powiązanych metod razem - ułatwia to wykrywanie szwów, w których można podzielić istniejącą dużą klasę na kilka mniejszych, bardziej ukierunkowanych.

 102
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 11:32:31
  1. Zmienne klasy (statyczne): najpierw zmienne klasy publicznej, potem chroniony, a potem prywatny.

  2. Zmienne instancji: najpierw publiczne, potem chronione, a następnie prywatne.

  3. Konstruktorzy

  4. Metody: metody te powinny być pogrupowane według funkcji, a nie niż przez zakres lub dostępność. Na przykład metoda klasy prywatnej może być pomiędzy dwiema metodami instancji publicznych. Celem jest, aby czytanie i zrozumienie kodu łatwiej.

Źródło: http://www.oracle.com/technetwork/java/codeconventions-141855.html

 91
Author: Michael,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-26 19:48:33

Bardziej precyzyjny link do "Konwencji kodu": "deklaracje klas i interfejsów"

 30
Author: Timofey Gorshkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-26 20:21:11

Nie jestem pewien, czy istnieje powszechnie akceptowany standard, ale moje własne preferencje są;

  • konstruktorzy pierwszy
  • metody statyczne następnie, jeśli istnieje metoda główna, zawsze przed innymi metodami statycznymi
  • Następnie metody niestatyczne, zwykle w kolejności znaczenia metody, po której następują dowolne metody, które wywołuje. Oznacza to, że publiczne metody, które wywołują inne metody klasowe, pojawiają się w kierunku góry, a prywatne metody, które nie wywołują innych metod, zwykle kończą się w kierunku bottom
  • Standardowe metody jak toString, equals i hashcode Następna
  • getterzy i setterzy mają specjalne miejsce zarezerwowane na dole klasy
 12
Author: Qwerky,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 11:44:49

Moja "konwencja": statyczna przed instancją, publiczna przed prywatną, konstruktor przed metodami, ale główna metoda na dole (jeśli jest obecna).

 11
Author: eljenso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 11:36:17

40 metod w jednej klasie to trochę dużo.

Czy sensowne byłoby przeniesienie niektórych funkcji do innych - odpowiednio nazwanych-klas. Wtedy jest o wiele łatwiej zrozumieć.

Gdy masz ich mniej, o wiele łatwiej jest wymienić je w naturalnej kolejności odczytu. Częstym paradygmatem jest lista rzeczy przed lub po , których potrzebujesz, w kolejności, w jakiej ich potrzebujesz.

To zwykle oznacza, że main() idzie na górę lub na dół.

 10
Author: Thorbjørn Ravn Andersen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-28 04:34:00

Również eclipse oferuje możliwość sortowania członków klasy dla Ciebie, jeśli z jakiegoś powodu je pomieszałeś:

Otwórz plik klasy, przejdź do "źródło" w menu głównym i wybierz "Sortuj członków".

Wzięte stąd: metody sortowania w Eclipse

 2
Author: Stephan Richter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:13

Używasz Eclipse? Jeśli tak, chciałbym trzymać się domyślnej kolejności sortowania członków, ponieważ prawdopodobnie będzie to najbardziej znane temu, kto czyta Twój kod (chociaż nie jest to moja ulubiona kolejność sortowania.)

 1
Author: finnw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-12 11:33:02