Po co w Javie są gettery i settery skoro zawsze są publiczne (nie widziałem innych) ? Prywatne pola i brak setterów przyda się do tworzenia immutable obiektów ale nie widziałem tego zbyt często. Inną sytuacją która przychodzi mi do głowy to walidacja w setterach choć też czytałem, że nie powinno się raczej walidować w setterach pojo. Może ktoś podać konkretne przykłady lub wyjaśnić po co rzeczywiście stosuje się gettery i settery? Zaczynam naukę javy i prywatne pola i publiczne gettery/settery przewijają się wszędzie.
- Rejestracja:prawie 10 lat
- Ostatnio:14 minut
- Postów:2368
Przecież gettery i settery nie są wbudowane i nieodzowne, sam dodajesz :-)
- Jak idziesz w anemiczne modele -> gttery/settery będą naturlane
- Jak masz inversion of control i dependency injection -> settery/gettery mogą być alternatywą dla wstrzykiwania via konstruktor (lub adnotacji - pewnie w zależności od implementacji kontenera IoC)
- Jak idziesz w OOD -> gettery/settery wątpliwe, będziesz raczej miał metody zmieniające stan obiektu i zwracające jakiś deskryptor zmiany/publikujące zdarzenie/komunikat

- Rejestracja:ponad 8 lat
- Ostatnio:około 3 godziny
- Lokalizacja:U krasnoludów - pod górą
- Postów:4707
Temat wielokrotnie wałkowany. Getterow i setterów nie trzeba stosować. Po prostu tak się kiedyś kodowało - i niektórym tak zostało.

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
- Konstruktor
- Builder
długo długo nic - Setter
Niemniej gettery/settery są często potrzebne przy jakichś automatycznych mapowaniach w stylu DOT DTO->json i odwrotnie.

jakąś biznesową metodę tego obiektu domenowego
brzmi to jak setGrade
? łatwiej będzie jak pokażesz kod :P

ale nie będzie ona setterem
bo (pomijając single-responsibility...) setGrade również
sprawdzi czy nie wychodzi Ci pasek, a później dosmth?

- Rejestracja:ponad 8 lat
- Ostatnio:około 3 godziny
- Lokalizacja:U krasnoludów - pod górą
- Postów:4707
Shalom napisał(a):
Niemniej gettery/settery są często potrzebne przy jakichś automatycznych mapowaniach w stylu DOT->json i odwrotnie.
Pewnie miałeś na myśli niesławne DTO.
I nie, nie sa potrzebne od dawna raczej. Jackson nie potrzebuje w żadną stronę

- Rejestracja:ponad 10 lat
- Ostatnio:5 miesięcy
- Lokalizacja:Warszawa
- Postów:3573
@jarekr000000: a to bez setterów i getterów nie trzeba jakiś adnotacji (hehehehehe) do Jacksona?


- Rejestracja:prawie 7 lat
- Ostatnio:około rok
- Lokalizacja:Warszawa
- Postów:86
Może się mylę, ale wydaje mi się, że settery / gettery są po to, żeby w pewnym sensie oddzielić interfejs od implementacji? Dzięki temu kiedyś w przyszłości możesz zmienić to co się pod nimi kryje nie psując reszty programu - interfejs nadal pozostaje taki sam.

- Rejestracja:około 21 lat
- Ostatnio:prawie 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
@arczinosek nie, od tego są interfejsy. Gettery/settery właśnie w tym przeszkadzają bo eksponują na zewnątrz szczegóły implementacyjne.

- Rejestracja:około 8 lat
- Ostatnio:ponad 4 lata
- Postów:1703
zobacz se rozdział 3 Getters and Setters





- Rejestracja:prawie 8 lat
- Ostatnio:ponad 4 lata
- Lokalizacja:Siemianowice Śląskie
- Postów:500
Julian_ napisał(a):
No i pisze gościu, że są przypadki, gdzie nie trzeba tworzyć setterów. Wg mojej interpretacji będą to na przykład wewnętrzne DTO (java nie ma tupli). Czyli coś, co w kotlinie deklaruje się jako data class. Tak więc nie widzę wyraźnej różnicy zdań. Ogólnie takie statyczne rzeczy, które w C++ zapisalibyśmy jako struct, a nie class. W klasach, które mają metody już bym publicznych zmiennych nie robił.
- Rejestracja:ponad 10 lat
- Ostatnio:5 miesięcy
- Lokalizacja:Warszawa
- Postów:3573
@jarekr000000 @Wibowit dziś dzięki Twitterowi: https://spring.io/blog/2018/09/17/introducing-spring-data-jdbc
Customer customer = new Customer();
customer.dob = LocalDate.of(1904, 5, 14);
customer.firstName = "Albert";
Note that you don’t need getters or setters. It is perfectly okay to use them if you prefer to do so. Really, the only requirement is that the entity has a property annotated with Id
Jestem zszokowany normalnie :D :D :D
Gettery i settery mają tą przewagę nad bezpośrednim dostępem do pól (pomijając sensowność takiego dostępu), że są wywołaniami metod (LOL), co jest inaczej obsługiwane przez JVM i można np. napisać proxy albo aspekt.
Poza tym uważam, ze gettey i settery powinny zostać zniszczone.

- Rejestracja:około 6 lat
- Ostatnio:ponad rok
- Lokalizacja:Zielona Góra
- Postów:83
Niedawno się zarejestrowałem i ciekawił mnie właśnie ten temat więc pozwolę sobie odkopać, żeby dodać pewien ciekawy przykład który usłyszałem kiedyś na jakimś rosyjskim spędzie developerskim.
Wyobraźmy sobie że przychodzimy do baru z zamiarem wypicia piwa. Normalnie wyciągnęlibyśmy pieniądze z kieszeni, przekazali je barmanowi oraz wypili piwo.
Natomiast w erze getterów i setterów - 'barman manager' wyciągnąłby nam pieniądze z kieszeni i piwo wlał do gardła.
Taki gwałt na obiekcie w postaci piwosza.



- Rejestracja:ponad 21 lat
- Ostatnio:2 dni
- Lokalizacja:Kraków
- Postów:1114
Wibowit napisał(a):
Zadziwiające, że do getterów i setterów nie stostuje się zasada YAGNI.
Najzabawniejsze jest to że o ojciec YAGNI pisał właśnie o geterach i seterach kiedy YAGNI się narodziło :)
You find that you need a getter for some instance variable. Fine, write it. Don’t write the setter because “we’re going to need it”. Don’t write getters for other instance variables because “we’re going to need them”.
The best way to implement code quickly is to implement less of it. The best way to have fewer bugs is to implement less code.
You’re not gonna need it!

raczej nie
.