Kategorie
java

Java 14 – co nowego?

Osiągnięcie statusu General Availability dla Java 14 zaplanowano wg harmonogramu na 17 marca. Ta data zbliża się coraz szybciej. Dlatego warto zerknąć, co nowego ma znaleźć się w tym wydaniu Java 14. I, jak w przypadku każdego nowego wydania JDK, można zadać sobie kilka pytań:

  • Czy jest w tym wydaniu coś naprawdę ciekawego?
  • Czy zmieni ono coś w sposobie naszego programowania?

Co zatem nowego trafi do Java 14?

Czy jest tu coś szczególnie ciekawego?

JEP 305: Pattern Matching for instanceof (Preview)

Dzięki tej propozycji będzie można w bardziej płynny sposób używać zmiennych. Typowe do tej pory:

if (obj instanceof String) {
String s = (String) obj;
System.out.println(s); }

Będziemy teraz mogli zastąpić przez:

if (obj instanceof String s) {
System.out.println(s); }

JEP 358: Helpful NullPointerExceptions

W Java 14 uzyskamy lepsze wsparcie do diagnozowania ulubionego wyjątku każdego programisty Java, czyli NPE. 

Na przykład w wyrażeniu:

a.i = 7;

pojawienie się NPE zostanie zakomunikowane w ten sposób:

Exception in thread "main" java.lang.NullPointerException: 
Cannot assign field "i" because "a" is null
at TestJEP358.main(TestJEP358.java:5)

Wygląda fajnie, prawda? Ułatwienie pozwoli w wielu przypadkach na uniknięcie dłuższego procesu debugowania, a co za tym idzie skróci czas szukania błędów. 

 

Z drugiej jednak strony w sekcji motywującej tę zmianę znalazł się przykład:

a.b.c.i = 99;

I niewątpliwie dokładny opis wystąpienia miejsca wyjątku będzie tu bardzo pomocny…

 

Ale, warto też zwrócić uwagę, że o ile ten fragment kodu pokazuje możliwości nowej zmiany w JDK, to jednak sam w sobie nie jest przykładem zbyt dobrego stylu kodowania ze względu na wysoki coupling i niską kohezję. Można więc wyciągnąć wniosek, że zmiana w JDK rzeczywiście w wielu miejscach pomoże w diagnozowaniu problemów. Jednak istnieje też pewne zagrożenie, że w pewnych scenariuszach, pozwoli na szybkie załatanie błędów, bez większej refleksji nad designem kodu.

JEP 359: Records (Preview)

W JDK 14 to zmiana jest zdecydowanie moją ulubioną. Wydaje mi się, że każdy przyzna, że w Javie klasy, których celem jest reprezentowanie niezmiennych  danych mają zdecydowanie (ang. immutable data) zbyt rozwlekłą formę. Oczywiście zamiast pisania serii setterów i getterów możemy (wręcz powinniśmy) stosować bibliotekę Lombok. Jednak inne języki programowania pokazują, że takie struktury danych mogą mieć wsparcie w samym języku bez stosowania dodatkowych bibliotek. I tak w JDK 14 to wsparcie (jeszcze w formie Preview) powinniśmy uzyskać w postaci ograniczonej formy klasy (podobnie jak Enum):

 record Point(int x, int y) { }

 

Czy jest coś jeszcze ciekawego?

Raczej z nowości dla typowego kodu biznesowego już nic ciekawego nie widać. Oczywiście jest kolejna wersja bloków tekstowych, ale nie jest to już taka nowość. Dużo zmian widać w obszarze garbage collectora, ale nie wpłyną one znacząco na typową pracę developerów. Niektórych może zainteresować packaging tool wracający w nowszej formie z zaświatów JavaFX.

Jak zmieni się nasze programowanie?

Dla programistów korzystających z instanceof na pewno korzystną zmianą będzie w tym obszarze pattern matching. Mimo wszystko w tym przypadku pytanie dotyczące tej zmiany nie powinno brzmieć „czy skorzystasz z nowego pattern matchingu?” lecz „dlaczego nie korzystasz z Vavr?”.

Wsparcie dla NPE na pewno będzie jedną z najbardziej widocznych pomocy dla developerów wchodzącą w Javie 14. Pozwoli na szybsze diagnozowanie błędów, co w podejściu ogólnym powinno przełożyć się na lepszą jakość rozwiązań.

Największe znaczenie na przyszłość wg mnie ma wprowadzenie nowego typu ograniczonej klasy Record, dzięku której sam język da programistom wsparcie dla immutable data. Wskazuje to na ewolucję języka w dobrą (w mojej opinii) stronę. Zmiana ma co prawda w tej chwili charakter Preview, ale jest dobrym prognostykiem na przyszłość.

Podsumowanie

Cóż więc nowego niesie ze sobą Java 14? Po pierwsze jest w niej kilka ciekawych zmian. Po drugie należy zauważyć, że zmiany te nie są jednak przełomowe. Podobnie jednak jak wydania wcześniejsze widoczny jest trend w stopniowym unowocześnianiu języka.

W dalszej perspektywie będziemy czekać na rozwój pattern matchingu w ramach JDK oraz wsparcie dla immutable data types. 

0 0 vote
Article Rating
Subscribe
Powiadom o
guest
0 komentarzy
Inline Feedbacks
View all comments