V tomto článku sa pozrieme na zmeny, ktoré priniesla Java 18.
Kódovanie textov
V prvom rade sa zmenilo základné nastavenie kódovania. Ak si doteraz pracoval na Windowse a vytváral si súbor napríklad cez FileWriter tak kódovanie textu bolo uložené vo formáte Windows-1252. Ak si vytváral súbor na Linuxe alebo Macu tak dáta boli uložené vo formáte UTF-8. Teraz aj keď si na Windowse, tak základné kódovanie je nastavené na UTF-8.
Jedoduchý web server
Java 18 predstavila príkaz jwebserver v príkazovom riadku. Tento príkaz spustí minimalistický webový server pre jednoduché testovanie. Tento server sa dá vytvoriť aj programovo použitím metódy SimpleFileServer.createFileServer.
Pattern matching v switch
Vo verzii 18 je stále v preview fáze. Táto funkcia umožňuje použiť switch flexibilnejšie, najmä s prácou s typmi v case príkaze.
Tu sú ďalšie príklady na ilustráciu:
Switch nad, ktorý pracuje s rôznymi typmi objektov:
switch (obj) {
case Integer i -> System.out.println("Integer: " + i);
case String s -> System.out.println("String: " + s);
case null -> System.out.println("It's null!");
default -> System.out.println("Unknown type");
}
Switch, ktorý pracuje s objektami a s takzvanými guards, čo sú ďalšie logické požiadavky:
switch (obj) {
case String s && s.length() > 5 -> System.out.println("Long string: " + s);
case String s -> System.out.println("Short string: " + s);
case Integer i && i > 10 -> System.out.println("Large integer: " + i);
default -> System.out.println("Other");
}
V tomto príklade riadok, ktorý sleduje, či je dĺžka stringu väčšia ako 5 dominuje nad druhým casom, ktorý rieši len či je s String.
Ak by som ich vymenil
switch (obj) {
case String s -> System.out.println("Short string: " + s);
case String s && s.length() > 5 -> System.out.println("Long string: " + s);
case Integer i && i > 10 -> System.out.println("Large integer: " + i);
default -> System.out.println("Other");
}
tak druhý riadok by bol chybový a hláška znie:
Label is dominated by a preceding case label 'String s'
Switch, ktorý pracuje so sealed triedami:
sealed interface Shape permits Circle, Rectangle {}
final class Circle implements Shape { }
final class Rectangle implements Shape { }
A switch, ktorý môže pracovať so špecifickými subtypmi triedy Shape:
Shape shape = new Circle();
switch (shape) {
case Circle c -> System.out.println("It's a circle");
case Rectangle r -> System.out.println("It's a rectangle");
}