Java 10 - var, nowe metody w Optional, kolekcje "unmodifiable"
Nowości w języku
Java 10 wniosła do języka trochę słodkiego smaku. Zmian z pewnością nie należy określać pogardliwym stwierdzeniem “to tylko syntactic sugar!”, ale nie mam wątpliwości, że dotatki są wyjątkowo smaczne - spójrzcie:
Wnioskowanie typów dla zmiennych lokalnych
Od wersji Java 10 możliwe jest deklarowanie zmiennych lokalnych inicjalizowanych w miejscu definicji bez podawania ich typu. Zmienną taką należy zadeklarować poprzedzając ją - zamiast nazwą typu - słówkiem var (ze względu na kompatybilność wsteczną var nie jest słowem kluczowym, lecz zarezerwowaną nazwą typu). Nareszcie!
var list = new ArrayList<String>(); // infers ArrayList<String>
var stream = list.stream(); // infers Stream<String>Dobra praktyka: używać tam, gdzie nie ma wątpliwości co do typu. Nie należy nakładać na przyszłych maintainerów kodu konieczności sprawdzania np. typu wartości zwracanej przez funkcję; byłoby to dość niegrzecznym nadużyciem:
var x = someFunction();Inne konteksty użycia var to:
- zmienna indeksująca w standardowej pętli
for (var i = 0; i < count; i++) {
// use i
}- zmienna pętli w pętli rozszerzonej
for (var person : people) {
//use person
}- zmienne używane w konstrukcji try-with-resources
try(var data = new FileInputStream("my_data.txt)) {
// use data
}Nowa metody w klasie Optional
Optional otrzymał nowy wariant metody rzucającej wyjątek w przypadku braku wartości; obok orElseThrow(Supplier<Throwable>) została dodana metoda orElseThrow(), która rzuca NoSuchElementException.
Kopiowanie kolekcji
Interfejsy List i Set uzyskały nową metodę copyOf pozwalającą na utworzenie niemodyfikowalnej kolekcji z elementów bieżącej (this) kolekcji.
W przeciwieństwie do kolekcji uzyskanych przez owinięcie kolekcji źródłowej wywołaniem: Collections.unmodifiableList(source) (i podobnymi), które stanowią jedynie widok na kolekcję źródłową i ich zawartość odzwierciedla zmiany w “źródle”, kolekcje skopiowane przy użyciu copyOf() są “oderwane” od kolekcji źródłowej i nie “widzą” zmian w niej dokonanych.
Wykonana kopia jest płytka, więc zmiana elementów znajdujących się w kolekcji jest w dalszym ciągu możliwa. O niemodyfikowalnych kolekcjach i widokach można przeczytać w API dla interfejsu Collection.
Java - inne wpisy
Może Cię również zainteresować:
- Co się zmieniło w Javie po wersji 7
- Java 8 - Mały przykład: przewidywanie kolejnej daty w serii dat i wyznaczenie średniej odległości między datami.
- Java 9 - Praktyczy przykład: trzy moduły
- Java 9 - Czy mogę stworzyć z mojej aplikacji binarkę?
- Java 9 - nowości w bibliotece
- Java 9 - co to jest JShell i dlaczego warto używać REPL-a
- Java 11 - HttpClient i uruchamianie jednoplikowych programów
This text is part of the series java...
- 2025-21-03 - Java 24 Overview
- 2024-01-11 - Java 23 w praktyce
- 2021-27-11 - JDK 18 proposals: Java 18
- 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