Site icon Java blog

Java 12: drobne zmiany

java 12

Nie zauważysz wiele istotnych zmian Java 12. Co prawda w kolejnym JDK zaprezentowano 'demo’ kilku ciekawych „featurów”, które wejdą następnych wersjach (np. zmiany w switch), jednak sama „dwunastka” nie posiada wielu nowych funkcjonalności, które zrewolucjonizują Twoje kodowanie. Mimo wszystko zachęcam do przeczytania tego krótkiego artykułu.

Zmiany w klasie String

W Java 12 pojawiają się dwie nowe metody dla klasy String. Obie nie zmieniają znaczącą jego funkcjonalności, więc możesz śmiało jego potraktować jako ciekawostki.

Metoda indent

Opcja budowania odpowiedniego akapitu tekstu bez korzystania ze standardowego znaku reprezentującego spację.

String text = "Java 12 features";
String shiftText = text.indent(10);
System.out.println(shiftText);

Powyższy kod wyświetli napis przesunięty o dziesięć spacji.

Metoda transform

Nowa funkcja w klasie String pozwala na skorzystanie z lambdy przy edycji tekstu, np. poprzez przepisanie jego wspak. We wcześniejszych wersjach Javy należałoby wykonać jego przekształcenie i przypisać do nowej zmiennej. Skorzystanie z transform pozwala na napisanie kodu w bardziej formie funkcyjnej niż wcześniej.

text.transform(value -> new StringBuilder(value).reverse().toString());

Number formatting

Podobnie jak w przypadku String w Java 12 ułatwiono też formatowanie dużych liczb. Klasa NumberFormat ułatwia odpowiednie formatowanie liczb w zależności od kraju. W ten sposób liczbę 3 000 000, można łatwo przekształcić w tekst, który jest czytelniejszy dla użytkownika końcowego. Formatowanie posiada dwie opcję, krótszą nazwę zawierającą liczbę początkową i jedną literę sugerującą wielkość liczby (np. M dla milionów, K dla tysięcy, itp.) oraz dłuższą, która pokażę pełen rząd wielkości.

NumberFormat numberShort = NumberFormat.getCompactNumberInstance(new Locale("en", "US"), NumberFormat.Style.SHORT);
System.out.println(numberShort.format(3000000));

Ten kod po wyświetleniu sparsuje wartość '3000000′ do skróconej nazwy 3M. Analogicznie wersja długa wyświetli napis „3 million”.

NumberFormat numberLong = NumberFormat.getCompactNumberInstance(new Locale("en", "US"), NumberFormat.Style.LONG);
System.out.println(numberLong.format(3000000));

Teeing Collector

Kolejnym usprawnieniem w JDK jest nowy kolektor – teeing. Kolektory, wprowadzone wraz ze Stream API w Java 8 pozwalają na zapisanie strumienia w postaci kolekcji albo wykorzystanie funkcji, która pozwalałaby na zwrócenie konkretnej wartości (np. joining, która scala znaki w tekst).

Nowy kolektor pozwala na wykonanie dowolnej operacji matematycznej na dwóch liczbach. Np. jeśli chcesz policzyć średnią.

Stream.of(1, 2, 3, 4, 5)
                .collect(Collectors.teeing(Collectors.summingDouble(i -> i),
                        Collectors.counting(), (sum, count) -> sum / count));

Ta operacja policzy średnią z liczb: 1, 2, 3, 4, 5. W pierwszym argumencie funkcji, zsumowano wszystkie wartości, natomiast w drugim policzono ich liczbę. W ostatnim parametrze wywołano lambdę, która symbolizuje działanie matematyczne (tutaj jest to dzielenie), które będzie się odbywać na powyższych dwóch rezultatach.

Metoda File::mismatch

Ostatnia zmiana pozwala na łatwe zweryfikowanie, czy dwa pliki są identyczne.

Path filePath = Paths.get("note.txt");
Path filePathCopy = Paths.get("note.txt");
System.out.println(Files.mismatch(filePath, filePathCopy));

W tym przypadku, ponieważ porównywany został jeden plik sam z jego kopią. Zawartość obu plików jest oczywiście taka sama. W rezultacie metoda wyświetli kod -1, który pokazuje, że pliki są identyczne.

Path differentFile = Files.writeString(Files.createTempFile("changes", ".txt"),
                Files.readString(filePath) + "Some change.");
System.out.println(Files.mismatch(filePath, differentFile));

Jeśli pliki będą jednak miały inną zawartość, ta sama metoda wskaże, od którego miejsca są zauważalne zmiany (np. 20, co sugeruje, że po tylu znakach występują różnice).

Microbenchmark i inne usprawnienia

Poza zmianami w samym kodzie Java, do JDK 12 dodano kilka narzędzi. Jednym z nich jest Microbenchmark Suite, czyli zestaw narzędzi do testowania wydajności kodu i pomiaru czasu wykonywania funkcji.

Kolejnym narzędziem JVM Constants API, które umożliwia klasom Java dostęp do stałych definiowanych przez JVM, takich jak stałe typów podstawowych lub referencyjnych. Celem tego API jest ułatwienie programom manipulującym plikami klas modelowania instrukcji kodu bajtowego, które muszą obsługiwać ładowalne stałe.

Wprowadzono także wsparcie dla Unicode 11.0 oraz kontynuowano dalsze odchudzanie JDK poprzez usunięcie modułów związanych z Java EE.

Podsumowanie zmian w Java 12

Java 12 nie przyniosła wiele ciekawych zmian. Można nawet pokusić się o ocenę, że naniesione poprawki były bardziej kosmetyczne.

Pełna lista zmian: https://www.oracle.com/java/technologies/javase/12-relnote-issues.html

Link do lekcji: https://github.com/developeronthego/java9-plus/tree/main/src/main/java/jdk/java12/features

Exit mobile version