Java 9 - nowości w bibliotece
Java 9 to zarówno zmiany “małe” jak np. dodaniee API w klasie Optional
jak i “duże”, do których zaliczam - dodaną w “inkubatorze” - czyli odrębnym pakiecie - klasę HttpClient
(i klasy z nią związane). (O HttpClient
przeczytasz również w artykule Java 11 - HttpClient i uruchamianie jednoplikowych programów.)
Przyjrzyjmy się tym zmianom bliżej.
Zmiany w bibliotece standardowej
Małe zmiany
Java 9 wprowadziła kilka miłych zmian w bibliotece standardowej. W kategorii “drobnych” zmian w API znajdują się:
- poprawki w klasie Optional umożliwiające elegancki chaining w przypadku braku wartości:
ifPresentOrElse(Consumer<T> action, Runnable emptyAction)
or(Supplier<Optional<T> other)
- możliwość użycia na instancji
Optional
potęgi strumieni dzięki metodziestream()
- metody static factory w interfejsach kolekcji umożliwiające tworzenie “któtkich” (w bibliotece są warianty overloaded do 10 elementów), niemodyfikowalnych kolekcji: List.of(), Set.of()
- można użyć diamond operator przy instancjonowaniu anonimowych klas wewnętrznych (inner)
- interfejsy mogą mieć metody prywatne
Duże zmiany
Do zmian “dużych” zaliczam:
- zastąpienie klasy
HttpUrlConnection
prawdziwym klientem HTTP; w tej wersji Javy znajduje się on w pakiekiejdk.incubator.http
(dokumentacja), a oficjalnie jest wprowadzony dopiero w Javie 11 (dokumentacja, wprowadzenie).
|
|
- wprowadzenie nowego API do zarządzania istniejącymi procesami, głównie poprzez rozszerzenie klasy
java.lang.ProcessHandle
- pozwala ono na znalezienie “uchwytu” bieżącego procesu, procesu o pewnym PID, znalezienie dzieci procesu, potomków procesu, jego rodzica, a nawet wszystkich widocznych procesów (metody current(), of(long), children(), descendants(), parent() i allProcesses())
- pozwala na pobranie informacji o procesie (klasa ProcessHandle.Info) takich jak: argumenty, wiersz poleceń, użytkownik, czas rozpoczęcia
- umożliwia zniszczenie procesu
- istniejąca klasa
Process
reprezentuje proces potomny utworzony z bieżącego procesu i daje możliwość czytania/pisania/przekierowania z/do strumieni standardowych; można z niej również uzyskać “handle” do procesu natywnego - metoda
onExit()
zwracaCompletableFuture
, co pozwala na asynchroniczne wykonanie dowolnej akcji gdy proces rzeczywiście się zakończy (bądż synchroniczne czekanie przy użyciuget()
)
Przykład
Przykład użycia API do monitorowania procesów: wypisanie i zliczenie wszystkich procesów w systemie (NativeProc.java):
Uwaga: Bloki tekstowe są (nawet w javie 14) preview feature, więc program należy skompilować i uruchomić przy użyciu flagi --enable-preview
, co zresztą dobrze widać na poniższym rezultacie: proces 8090 to proces generujący poniższe dane, czyli JVM v.14, na której uruchomiłam program NativeProc. Jednym z jego argumentów jest właśnie --enable-preview
.
Kompilacja i uruchomienie:
|
|
Podobne artykuły
Mogą Cię również zainteresować:
- Co się zmieniło w Javie po wersji 7
- Praktyczy przykład: trzy moduły
- Czy mogę stworzyć z mojej aplikacji binarkę?
- Java 9 - co to jest JShell i dlaczego warto używać REPL-a
- Java 10 - var, nowe metody w klasie Optional, niemodyfikowalne kolekcje
- Java 11 - http client i uruchamianie jednopliowych programów
Ten wpis jest częścią serii java.
- 2021-09-12 - Java 18: co nowego? - przegląd JEP-ów
- 2021-21-09 - Java 17 - RandomGenerator i spółka
- 2021-15-09 - Java 17 - co nowego?
- 2021-04-03 - Java 15 - czym są sealed classes?
- 2021-26-02 - Java 13 i 14: Bloki tekstowe i rekordy
- 2021-24-02 - Java 12 - wyrażenie switch (preview feature)
- 2021-23-02 - Java 11 - HTTP Client i uruchamianie jednoplikowych programów
- 2021-18-02 - Java 9 - co to jest JShell i dlaczego warto używać REPL-a w Javie
- 2021-12-02 - Java 10 - var, nowe metody w Optional, kolekcje "unmodifiable"
- 2021-11-02 - Java 9 - nowości w bibliotece
- 2021-10-02 - Java 9: czy mogę stworzyć z mojej aplikacji binarkę?
- 2021-10-02 - Java 9: praktyczny przykład - trzy moduły
- 2021-08-02 - Java 8: praktyczny przykład - przewidywanie kolejnej daty w serii