Wybór języka

records

Minęło kolejne pół roku, kolejne wydanie nowej wersji Javy™ za nami. Zdaniem wielu “Java jest wolna”. Okazuje się, że rozwój Javy jest tak “wolny”, że kolejne wydania nie są tylko podbiciem wersji, bo mogą znacząco zmieniać reguły gry. To dobry powód na kolejny deep dive w Javie. Będzie mowa o: Rekordach: gdzie i jak ich użyć (poza DTO/VO) dopasowaniu do wzorca z instanceof (zwane również smart casting) klasach zapieczętowanych (czyli nowym wymiarze widoczności typów) ostrzeżeniach z projektu Jigsaw (–illegal-access kontratakuje!
W zeszłym roku poczyniłem dwa wpisy o torturowaniu rekordów w Javie Lombokiem. Na nasze (nie)szczęście (zależy, jak to widzisz), zespół Lomboka zdecydował się ukrócić nasze niecne zabawy. Jednakże nie składamy broni i tym razem idziemy po wzorzec budowniczego!
W jednym z moich poprzednich wpisów traktowałem Java™ Records Lombokiem. Po otrzymaniu wielu zachęcających komentarzy (“co za chory pomysł, szacunek!"), prezentowaniu “Java 15. Nowości godne uwagi” i paru dyskusjach na kanale JVM Poland, pora na kolejne tortury. Sorry ;-)
W czasie moich aktywności online dotyczących tłumaczenia rekordów parę osób rzuciło podkręconą piłkę “no a Lombok?” W szczególności pytanie przybiera formę “skoro rekordy są immutable, to czym się różnią od @Value z Lomboka?”
Na okoliczność wydania Javy 14 widziałem parę dyskusji przebiegających mniej więcej takim stylu: - O, rekordy w Javie, fajnie, w końcu mamy automatycznie generowane settery i gettery! - Nie, rekordy w Javie to POJOs bez setterów… - A, okay… Fajnie, w końcu mamy w Javie generowane Beany, ale bez setterów!
W poprzednim wpisie było o tym, jak utworzyć rekord od Javy 14 i po co w ogóle rekordy są. W tym wpisie na tapet bierzemy ograniczenia i możliwości rekordów.
Java 14 przyniosła nam rekordy (ang. records) jako preview feature. Było (jest?) przy tym sporo zamieszania, deklaracji i ciężkich obelg miotanych w kierunku wrażych bibliotek i wtyczek do IDE. Pozwólcie mi dorzucić moje trzy grosze.

Wybór języka