Java - get/set prefixy u metod

Natix

Re:Java - get/set prefixy u metod
« Odpověď #15 kdy: 14. 03. 2015, 22:20:08 »
Prefixy get (u booleanů volitelně is) a set jsou součástí specifikace JavaBean. I když si lidi často myslí, že je to jen nějaká konvence. Hodně věcí by ti pak vůbec nefungovalo (různá mapování atd.) nebo by sis tím přidělal práci.

Už po několikáté v téhle diskuzi vidím zaklínadlo "specifikace JavaBean". Mohl by prosím ale někdo uvést nějaký real-life příklad, kdy by to člověka mělo jakkoliv zajímat?

Jasně, pokud použiju Hibernate, tak do entitních tříd dám gettery, settery a defaultní konstruktor. Ale to není přece všechno; aby to bylo k něčemu dobré, tak tam musím ještě doplnit nějaké anotace typu @Entity, @ManyToOne, případně třídu zaregistrovat v persistence.xml. To, že třída je formálně džavabýn samo o sobě k ničemu není.

A naopak, to že používám Hibernate/JPA, v žádném případě automaticky neznamená, že úplně všechny třídy v projektu budou psány tímhle způsobem. Ne, týká se pouze úzkého a velmi jasně definovaného souboru tříd, u kterých přesně vím, k čemu slouží a jak se budou používat.

To samé, pokud používám třeba JSF. Mám konkrétní html stránku, tak k ní vytvořím backing třídu, u které vím, jaké property budu chtít číst/zapisovat, takže pro ně vytvořím gettery a settery a na classu pak plácnu anotaci @ManagedBean. Podobně u JABX - mám několik datových struktur, které chci poskytovat přes své REST API, takže pro ně vytvořím příslušné třídy a na property pověsím nějaké ty @XmlWhatever anotace.

V žádném případě ale neplatí nějaký cargo kult, že bych si řekl "huh, mám tu hibernate/JSF/doplňte, takže všechny třídy musím psát jako javabeany, co kdyby se mi náhodou dostaly do persistence kontextu / faceletu / rest api / biblického ráje. O to víc nerozumím tomuhle komentáři:

ako som pisal vasa napr . trieda so setterom bez "set" moze ocitnut v spring xml konfiguraku a uz je to smutne

Ve springu se nevyznám, ale logika mi říká, že přece vím, jaké třídy se jak a kde používají. Nedovedu si představit, že by se mi nějaká random třída Foo sloužící k úplně jinému účelu dostala nějakou automagií na nějaké takovéhle místo, aniž bych s tím počítal.


Re:Java - get/set prefixy u metod
« Odpověď #16 kdy: 14. 03. 2015, 22:44:02 »
Mohl by prosím ale někdo uvést nějaký real-life příklad, kdy by to člověka mělo jakkoliv zajímat?
Například IoC kontejnery, které používají property pro vkládání závislostí. Binding mezi JavaBeanou a Swing modelem. Binding webových požadavků. Designery formulářů.

To, že třída je formálně džavabýn samo o sobě k ničemu není.
Jistěže není. Potřebujete ještě tu druhou stranu, která JavaBeany očekává.

Franta <xkucf03/>

Re:Java - get/set prefixy u metod
« Odpověď #17 kdy: 14. 03. 2015, 23:30:34 »
Už po několikáté v téhle diskuzi vidím zaklínadlo "specifikace JavaBean". Mohl by prosím ale někdo uvést nějaký real-life příklad, kdy by to člověka mělo jakkoliv zajímat?

Myslím, že sis odpověděl sám – JPA, JSF, JSP, JAXB (včetně SOAP webových služeb nebo REST API) a další knihovny a frameworky. Někdy se nestandardně pojmenované metody dají obejít, přidáš nějaké ty anotace a bude to fungovat, jen si přiděláš trochu práce, jindy máš smůlu. Ale jak jsem psal – pokud nechceš ty třídy používat na místech, kde se očekává JavaBean, tak si je pojmenuj, jak chceš.

A jestli je někomu zatěžko psát gettery a settery ručně, může zkusit projekt Lombok.