Zajímá tě, jaké změny se udály v Java 10 a 11? Čti článek a vše podstatné se dozvíš.
Java 10
Var
Od verze 10 je dostupná možnost nespecifikovat typy proměnných pro lokální proměnné, pokud je umí kompilátor zjistit z pravé strany. Namísto napsání typu stačí napsat nespecifikovaný typ a to var.
var list = new ArrayList<String>();
Kompilátor umí zjistit, jakého typu je dopis a tedy nelze přidávat čísla do dopisu, ale pouze String.
var list = new ArrayList<String>();
list.add("Jaro");
Var se nebere jako klíčové slovo, ale jako nespecifikovaný typ. Tedy nemůžeme vytvořit třídy s názvem var, ale lze vytvořit metodu s názvem var.
//error
String return(){
return "";
}
//ok
String var(){
return "";
}
Nová metoda na kolekcích
U kolekcí přibyla metoda copyOf, která zkopíruje jednu kolekci do druhé.
List<String> list = List.of("Jaro", "Fero", "Duro");
Set<String> set = Set.copyOf(list);
List<String> listCopy = List.copyOf(set);
Map<Integer,String> map = Map.of(1,"Jaro",2,"Fero");
Map<Integer,String> map2 = Map.copyOf(map);
Java 11
Var v lambda výrazech
Lambda výrazy podporují typ inferenci, což znamená, že pokud používáš proměnnou v lambda výrazu, tak java kompilátor umí zjistit, jakého je typu a nemusíme typ zadefinovat.
list.stream()
.map(s -> s.toLowerCase()+".")
.collect(Collectors.toList());
V předchozích verzích jevy jsme nedokázali psát anotace k proměnným uvnitř lambda výrazu, které neměly zadefinovaný typ. Od verze 11 je to možné, brzy – nemusíme nadefinovat specifický typ, stačí napíšeme-li var.
list = list.stream()
.map((@Notnull var s) -> s.toLowerCase()+".")
.collect(Collectors.toList());
Jednodušší spuštění programu
Pokud si napíšeš jednoduchý program a chceš ho spustit v konzoli, tak jej musíš nejprve zkompilovat přes příkaz javac a poté spustit přes příkaz java.
Nyní stačí, když rovnou spustíš .java soubor pomocí java příkazu. Stane se to, že se automaticky soubor zkompiluje a spustí.
java Main.java
java.lang.String metody
Ve třídě String přibyly nové metody.
isBlank() – vrací true, pokud je řetězec prázdný nebo obsahuje jen bílé znaky
lines() – ze Stringu se vrátí stream řádků – pokud stream obsahuje oddělovače řádků
java.util.function.Predicate not
Představme si takový kód:
lines.stream()
.filter(s -> !s.isBlank())
Pomocí Predicate.not vypadá krásnější a čitelnější:
list.stream()
.filter(Predicate.not(s -> s.isBlank()));
S výhodou použití method reference:
list.stream()
.filter(Predicate.not(String::isBlank));
Použijeme-li statický import:
list.stream()
.filter(not(String::isBlank));
Pokud tě zaujal článek a chtěl by ses dozvědět více, tak klikni na
moju stránku a přesuň se na to, co tě zajímá. Programování, kurzy, videa zdarma a jiné záležitosti. Klikej na www.jaroslavbeno.cz