Chciałem tylko wyjaśnić moje pytanie. Jaki jest sens posiadania prywatnej metody statycznej, a nie zwykłej metody z prywatną widocznością?
Myślałbym, że zaletą posiadania metody statycznej jest to, że można ją wywoływać bez wystąpienia klasy, ale skoro jest ona prywatna, to czy jest w tym sens, że jest statyczna?
Jedynym powodem, dla którego mogę myśleć, jest to, że pomaga koncepcyjnie zrozumieć metodę na poziomie klasy, a nie na poziomie obiektu.
object-oriented
class
methods
static-methods
access-modifiers
Rehan Naqvi
źródło
źródło
Odpowiedzi:
Charakter bycia statycznym jest niezależny od widoczności.
Powody, dla których chcesz mieć metodę statyczną (niektóre kody, które nie zależą od elementów niestatycznych) nadal będą przydatne. Ale może nie chcesz, aby ktokolwiek / cokolwiek innego go używał, tylko twoja klasa.
źródło
<
do<
itp Kiedy jest napisane ...&
na&
[gdybym pisał kod, przekonwertowałbym&
na to,&
nawet jeśli nie spodziewałem się, że będzie to konieczne, ale przypuśćmy, że nie]. Jest to później staje się niezbędne do obsługi ampersandy, ale metoda jest publiczna, zmieniając go poszerzyć&
do&
mogłaby złamać kod na zewnątrz, która wykonuje swój&
-to-&
podstawienie. Jeśli metoda jest prywatna, można ją jednak naprawić&
bez powodowania problemów z jakimkolwiek kodem zewnętrznym.Dość częstym powodem (w Javie) może być inicjowanie niezmiennych zmiennych pola w konstruktorze za pomocą prostej
private static
metody ograniczania bałaganu konstruktora.private
: klasy zewnętrzne nie powinny tego widzieć.static
: może wykonać jakąś operację, niezależny 1 stanu klasy przyjmującego.Nieco wymyślony przykład jest następujący ...
na przykład:
1 Zakładając, że nie ma interakcji z innymi
static
zmiennymi.źródło
super(...)
Wezwanie musi być pierwsza linia swojej klasie konstruktora, więc nie można zadeklarować zmienne lokalne, które pomogą Ci zorientować, co przejść do super rozmowy. Jednakże, może zadzwonić (prywatny) statyczne metody, które wykorzystują wiele linii, jak to konieczne, aby wypracować wartość przejść do super konstruktora.Typowym przypadkiem użycia
private static
metody jest metoda narzędziowaźródło
Widzisz, że masz kilka wierszy kodu, które są powtarzane w wielu twoich metodach, więc decydujesz się wyodrębnić je do jednej metody, ponieważ powielony kod nie jest dobry.
Metoda jest prywatna, ponieważ nie jest przeznaczona do powszechnego użytku i nie chcesz, aby wywoływany był niepowiązany kod. (Omów ten punkt w komentarzach…)
Ponieważ metoda nie ma dostępu do żadnych pól instancji, można ją ustawić na statyczną, czyniąc ją statyczną, można ją łatwiej zrozumieć, a może nawet trochę szybciej.
Potem .... (może teraz, może później, może nigdy)
Gdy metoda stanie się statyczna, jasne jest , że można ją przenieść z klasy, powiedzmy do klasy jedności.
Łatwo jest również przekształcić go w metodę instancji jednego z jego parametrów, często tam powinien być kod.
źródło
Mogę wymyślić co najmniej dwa powody, dla których potrzebujesz statycznej prywatnej metody w klasie.
1: Twoje instancje mają powód, aby wywoływać metodę statyczną, której nie chcesz wywoływać bezpośrednio, być może dlatego, że dzieli dane między wszystkimi instancjami twojej klasy.
2: Twoje publiczne metody statyczne mają podprogramy, których nie chcesz wywoływać bezpośrednio. Metoda jest nadal wywoływana bez wystąpienia, po prostu nie bezpośrednio.
Oczywiście, „to pomaga klasie mieć sens” to dobry powód sam w sobie.
źródło
Ogólnie, jeśli stwierdzę, że piszę prywatne metody statyczne, biorę to za wskazówkę, że jest coś, co powinienem był osobno modelować.
Ponieważ nie są one powiązane ze stanem konkretnej instancji obiektu, zbiór publicznych i prywatnych metod statycznych może tworzyć całkowicie odrębną klasę z własnymi metodami semantycznymi i niestatycznymi.
(Inna wskazówka jest taka, że jeśli stwierdzę, że mam wiele metod statycznych (publicznych i prywatnych), z których wszystkie mają wspólny parametr pewnego rodzaju, lepiej byłoby, gdyby byli członkami tego typu.)
Tak więc, aby odpowiedzieć na twoje pytanie, prywatne metody statyczne pojawiają się, gdy klasa udostępnia grupę powiązanych metod, które są niezależne od instancji tej klasy. (... a ponieważ są niezależni, może im być lepiej w swojej klasie.)
źródło
Bardzo prosty przykład, jaki mogę wymyślić, to jeśli chcesz wykonać pewne przetwarzanie argumentów wejściowych (lub pewnych manipulacji), które są przekazywane do funkcji głównej. Tak więc w tym przypadku, jeśli przetwarzanie jest duże i ta sama funkcjonalność nie będzie używana nigdzie indziej, sensowne będzie posiadanie funkcji prywatnej, ponieważ nie będzie ona używana / wywoływana z jakiegokolwiek innego miejsca + static, ponieważ main jest static.
źródło