Widziałem kod, w którym metody pobierające i ustawiające są deklarowane jako prywatne. Próbuję zrozumieć logikę, która kryje się za tym, i naprawdę ciężko mi zrozumieć, dlaczego uznałbyś je za prywatne? Jest to dokładnie przeciwieństwo tego, co staramy się osiągnąć za pomocą modułów pobierających i ustawiających.Dlaczego chcesz zadeklarować metodę pobierającą i ustawiającą metodę prywatną?
Odpowiedz
mogę myśleć z kilku powodów:
- chcesz, aby zapobiec w przyszłości dostęp publiczny.
Jeśli inny programista widzi Twój kod i chce uzyskać dostęp do zmiennej, ale nie ma ustawiaczy i pobierających, może pomyśleć, że po prostu o nich zapomniałeś i dodać je sam. Jeśli jednak zadeklarujesz je jako private
, jest to deklaracja intencji, mówiąc: Nie chcę, aby te zmienne były zmieniane lub dostępne z zewnątrz.
- chcesz skojarzyć ustawianie i pobieranie z innymi działaniami
powiedzieć, że nie chce public
akcesorów. Ale może chcesz sprawdzić, ile razy zmienna prywatna została zmieniona. Łatwiej używać settera zamiast zwiększać liczbę za każdym razem, gdy uzyskujesz dostęp do tej zmiennej.
- chcesz centralnego punktu dostępu
Znowu, nie chcesz public
dostępu, ale podczas debugowania, może chcesz umieścić punkt przerwania w każdym miejscu członkiem private
ulega zmianie. Zamiast więc ustawiać punkty przerwania wszędzie w klasie, wystarczy ustawić jedną z akcesorów.
To dokładnie przeciwieństwo tego, co staramy się osiągnąć poprzez podmioty pobierające i ustawiające.
W rzeczywistości tak nie jest. Powodem deklarowania modułów pobierających i ustawiających jest ukrywanie pól. Ma to na celu uniknięcie niepożądanego sprzężenia; tj. klientów API w zależności od szczegółów implementacji API. (To sprzężenie może być problematyczne z wielu powodów.)
Powodem utworzenia obiektu pobierającego i ustawiającego prywatna jest uczynienie odpowiedniej części abstrakcyjnego stanu obiektu prywatnym. To jest w dużej mierze niezależna od decyzji o użyciu modułów pobierających i ustawiających, czy też nie.
Chociaż argumenty przemawiające za wykorzystaniem metod pozyskiwania i ustalania nie są tak silne dla prywatnego państwa, nadal istnieją wymierne korzyści. Na przykład:
Metody getter/setter zapewniają miejsce na dodanie dodatkowego kodu zachowania lub sprawdzania błędów.
Zapewniają również miejsce do dodania kodu debugowania lub wstrzyknięcia kodu testowego (do testowania jednostkowego).
Ustawiacze i setery można nadpisać. Nie możesz tego zrobić z polami (prywatnymi lub nie).
- 1. Jak określić metodę prywatną
- 2. Jednostka testująca metodę prywatną - cel C
- 3. Jak dynamicznie definiować metodę jako prywatną?
- 4. Jak wywołać metodę prywatną spoza klasy java
- 5. W jaki sposób zaimplementowano metodę ustawiającą zatrzymanie za pomocą @synthesize?
- 6. Dlaczego można zadeklarować metodę interfejsu Java jako abstrakcyjną?
- 7. Dlaczego wywołujemy metodę doesNotRecognizeSelector:?
- 8. PHP - czy można zadeklarować metodę statyczną i niestatyczną?
- 9. Jak wywołać prywatną metodę statyczną za pomocą refleksji (Java)?
- 10. Jak mogę sfałszować prywatną metodę statyczną za pomocą PowerMockito?
- 11. Dlaczego otrzymuję "niezdefiniowaną metodę" assert_valid_keys` "?
- 12. Jak wywołać metodę klasy?
- 13. Dlaczego mogę abstrakcyjne zastąpić metodę abstrakcyjną?
- 14. Dlaczego mogę wywołać metodę prywatną innej instancji tego samego typu poza tą instancją?
- 15. jak zadeklarować globalną funkcję lub metodę za pomocą C#?
- 16. Dynamicznie przypisz metodę/metodę jako zmienną
- 17. Jak zadeklarować lub oznaczyć metodę Java jako nieaktualną?
- 18. uzyskać aktualną klasę i metodę?
- 19. Sporadyczna "Właściwość fasoli nie jest czytelna lub ma nieprawidłową metodę pobierającą" error
- 20. Właściwość "configurationClass" nie jest zapisywalna lub ma nieprawidłową metodę ustawiającą. Czy typ parametr seter
- 21. Dlaczego localloc łamie tę metodę CIL?
- 22. Dlaczego zastąpić metodę klonowania w Javie
- 23. Uzyskaj wyjątek java.lang.NullPointerException, gdy próbowano sfałszować prywatną metodę z mockito i powermockiem
- 24. Dlaczego zastosować metodę AsEnumerable() do tablicy?
- 25. Dlaczego można zadeklarować metodę zgłaszania wielu wyjątków, nawet jeśli żaden z nich nie został zgłoszony?
- 26. Szyny: jak zastąpić: zniszczyć metodę?
- 27. Dlaczego nie Railsy wybierają moją niestandardową metodę dostarczania poczty?
- 28. Napisz metodę rozszerzania Rx "RetryAfter"
- 29. Jak wywołać metodę niejednoznaczną?
- 30. jmock szyderczy metodę statyczną