sobota, 14 lutego 2015

Lepiej późno ... niż później.

Jakoś nigdy nie przyglądałem się zmianą wprowadzonym w Javie 7, 8'semka była gwiazdą :) Ale zmiany wprowadzone za pośrednictwem Project Coin były na tyle ciekawe że warto o nich wspomnieć.


Binary Literals.


Od Javy 7 typy integralne(integral types - byte, short, int, i long) mogą być reprezentowane za pomocą liczb binarnych, używając prefixu 0b albo 0B. 
A wcześniej ? wcześniej byliśmy zmuszeni do parsowania, co lubi generować problemy w postaci błędów. Tak więc kiedyś:
teraz: nic specjalnego, jednak Project Coin polega właśnie na dodawaniu takich małych, przyjemnych zmian, co zawsze jest dobre.


try-with-resources


Spring stworzył jdbc-template żeby ułatwić nam pracę z uciążliwym kodem który jest, upierdliwy - pff, wyjątki nam każą jakieś łapać...

Podobnie jest w przypadku ulepszonej konstrukcji try - umawiamy się, że implementując interface java.lang.AutoCloseable( java.io.Closeable implementuje AutoCloseable) pozwalamy javie na zamknięcia jakiegoś obiektu(wywołania na nim .close()). Ale do rzeczy, napiszmy skomplikowany program który podejmie się zadania ... odczytania pierwszej linii z pliku.
Po staremu(a raczej, normalnie): Teoretycznie wszystko fajnie, jednak ten blok finally i if uwiera trochę.
Po napisaniu tego kawałka kodu, sprawdziliśmy w dokumentacji co tam sobie BufferedReader implementuje - okazuje się że implementuje ów magiczny interface Closeable, tak więc możemy skorzystać z try-with-resources (resource'em jest tutaj obiekt na którym operujemy).
Więc po nowemu i lepszemu: W tym przypadku, kiedy coś pójdzie nie tak, metoda close() zostanie wywołana automatycznie. Dodatkowo, jeżeli deklarujemy więcej obiektów w taki sposób jak wyżej, kolejność zamykania tych obiektów jest zgodna z kolejnością ich tworzenia.

Przyjrzyjmy się jeszcze jednemu przykładowi: Tworzymy obiekt klasy ObjectInputStream, a ten przyjmuje w konstruktorze obiekt klasy FileInputStream - załóżmy że plik nie zostanie poprawnie otworzony, ObjectInputStream nie zostanie skonstruowany więc FileInputStream nie zostanie zamknięty. Tak, trochę naciągane, ale nie ja to wymyśliłem (odsyłam tutaj). W takim razie jak może być lepiej ? pozwólmy tym obiektom stworzyć się osobno:

 

switch i Stringi.


A więc, nadszedł ten dzień, w którym java.lang.String może pojawiać się w wyrażeniach konstrukcji switch. Obiekty te porównywane są przy pomocy metody .equals(), dodatkowo bytecode który jest generowany za pomocą tej konstrukcji(switcha) jest generalnie wydajniejszy niż w przypadku łańcuszka if'ów i else'ów, tak więc, używajmy :)

Przykładzik:

wszystko ?


nie, nie wszystko, cała lista nowych rzeczy, znajduje się tutaj. Kilka z nich to np: informacja o to tym że jakaś klasa zaimplementowała interface AutoCloseable i pozwala na autoclosa(w przypadku JDBC). Są też jeszcze dwie rzeczy o których jeszcze coś się pojawi, mianowicie:
- poprawione łapanie wyjątków.
- ulepszone API odpowiadające za obsługę plików (NIO.2)

Brak komentarzy:

Prześlij komentarz