Java 9 Flow.Subscriber and Flow.Publisher

Java 9 představila Flow API, které umožňuje reaktivní programování. V tomto příspěvku vytvořím aplikaci, která se bude skládat z jednoho publishera, který vytváří data a dvou subscriberů, kteří data zpracovávají. Jeden ze subscriberů je dostatečně rychlý a zvládá data zpracovávat rychleji, než je publisher produkuje, druhý subscriber je výrazně pomalejší.

Číst dálJava 9 Flow.Subscriber and Flow.Publisher

Java 10 a novinka var

Lokální proměnné je od Javy 10 možné deklarovat s použitím klíčového slova var. Přemýšlel jsem, k čemu tato změna je a začal jsem googlit. Narazil jsem na názor, že var má snížit ukecanost (verbosity) Javy. Pokud máte lokální proměnnou, můžete ji deklarovat takto:

var name = "John";
var age = 25;

místo

String name = "John";
int age = 25;

Nevidíte v tom žádnou výhodu? Moc psaní jste neušetřili. Souhlasím. A co teď?

List<Map<String, Set<MyClass>>> cosi;
var cosi;

Zde již nějaké to psaní ušetříme, ALE. Pokud v kódu narazím na takovouto proměnnou a budu s ní pracovat, pravděpodobně si stejně zjistím, jakého je typu. Takže místo toho, abych to rovnou viděl, musím se prokliknout někam, kde je daný typ uveden např. CosiClass.getCosi();. A pokud používáte nástroje svého IDE, pravděpodobně tam je možnost, nechat si přiřadit návratovou hodnotu volání do proměnné (v Idea IDE to je Ctrl + Alt + V), takže to stejně nepíši. Trochu mi to připomíná debaty na téma psaní getterů a setterů, kdy některé jazyky tyto metody generují automaticky na základně specifické syntaxe. V Javě je možné použít knihovnu Lombok a nebo nechat své IDE tyto metody vygenerovat. Asi teprve čas ukáže, zda se tato novinka mezi vývojáři uchytí.

Poznámka ke Kotlinu
Kotlin má var (od variable) a val (od value), kdy val je finální. Místo final String name napíšete val name.

fun main(args: Array) {
    var str1 = "Ahoj"
    val str2 = "Ahoj"

    str1 = "Nazdar"
//    str2 = "Nazdar" - Chyba: value cannot be reassigned
}

Doporučuji k přečtení tyto články:
beyondjava.net/should-you-embrace-var-in-java-10
openjdk.java.net/projects/amber/LVTIstyle.html

Nastavení verze Javy v Idea IDE

Několikrát se mi již stalo, že nově vytvořený, nebo nějak modifikovaný projekt, nešlo sbuildovat z důvodu, že Idea hlásila, že verze Javy je nastavena na 1.5 a daná konstrukce požaduje verzi 7, nebo 8, nebo vyšší. Pozor, existuje více míst, kde je nutné verzi pro projekt (nebo modul) nastavit.

File -> Settings -> Build, Execution, Deployment -> Compiler -> Java Compiler
File -> Project Structure -> Project
File -> Project Structure -> Modules -> Sources
File -> Project Structure -> SDKs

Rozdíl mezi rozhraním a statickou třídou v Javě

Java 8 zavedla defaultní metody v rozhraní, čímž trochu smyla rozdíl mezi rozhraním a abstraktní třídou. V tomto příspěvku se tedy podíváme blíže na rozhraní, jejich defaultní metody, abstraktní třídy a rozdíly mezi rozhraními a abstraktními třídami. Defaultním metodám se věnoval i tento dřívější příspěvek.

Rozhraní:
Může obsahovat statické metody.
Může obsahovat metody, které jsou implementovány (mají tělo).
Pro implementaci rozhraní se používá klíčové slovo implements.
Rozhraní nemůže mít instanční proměnné.
Rozhraní může mít pouze proměnné typu public static final (konstanty).
Metody v rozhraní jsou defaultně public abstract.

Číst dálRozdíl mezi rozhraním a statickou třídou v Javě

Přidání jiné webové stránky do Vaadin view

Do Vaadin view lze jinou webovou stránku přidat velmi jednoduše. Pro vložení jiného webu do aktuální stránky se v HTML používá element <iframe>. IFrame (Inline Frame, do češtiny se překládá jako plovoucí rám) vymezuje plochu v aktuální stránce pro vložení jiné webové stránky. Do Vaadin view lze <iframe> vložit pomocí objektu BrowserFrame.

final BrowserFrame browserFrame = new BrowserFrame("Stránka inITjobs.cz", new ExternalResource("https://www.initjobs.cz"));
browserFrame.setWidth("100%");
browserFrame.setHeight("600px");
addComponent(browserFrame);

Pro zvýraznění jsem přidal elementu <iframe> ohraničení.

.v-browserframe iframe {
  padding: 10px;
  border: 1px solid black;
}

Regulární výrazy v Javě

Pomocí regulárních výrazů definujeme vzory hledání pro řetězce. Vzor může být jediný znak, přesný řetězec, nebo složitý výraz obsahující speciální znaky.

Regulární výraz Popis
. Jakýkoliv znak
* Výskyt 0 nebo vícekrát
+ Výskyt 1 nebo vícekrát
? Výskyt 0 nebo jedenkrát
^ Začátek řádky (^A – začátek řádku musí začínat na A)
$ Konec řádky (z$ – řádek musí končit na z)
[] Definice možných výskytů ([123] – obsahuje 1, 2 nebo 3)
{} Počet možných výskytů ({5,7} – vyskytuje se alespoň 5x a maximálně 7x)
() Seskupení výrazů
| Nebo (a|b – a nebo b)
?! Negace (a?!b – a pokud není následováno b)
(?i) Regulární výraz není citlivý na malá a velká písmena (pozor na písmena s diakritikou)
\d Jakékoliv číslo
\D Cokoliv kromě čísla
\s Jakýkoliv bílý znak
\S Cokoliv kromě bílých znaků
\w Písmeno, číslice nebo podtržítko
\W Cokoliv kromě písmena, číslice nebo podtržítka

Java String má následující metody, které jako parametr mají regulární výraz:

string.matches("regex")
string.split("regex")
string.replaceFirst("regex", "replacement")
string.replaceAll("regex", "replacement")

Pro pokročilejší práci s regulárními výrazy se používají třídy Pattern a Matcher.

final String text = "Nějaký text";
final String regex = "Regulární výraz";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(text);
matcher.find()

Změna verze Javy z 8 na 11

Nedávno jsem prováděl změny verze Javy na projektu, který používá Spring Boot. Měnil jsem verzi Javy z verze 8 na verzi 11. Nebylo to až tak strašné, jak jsem čekal (spíše naopak), přesto se ale některé komplikace objevily. V tomto příspěvku budu postupovat od chyby k chybě, tak jak se u mě objevovaly.

Číst dálZměna verze Javy z 8 na 11

Instalace Open JDK na Ubuntu

V tomto příspěvku se podíváme na to, jak instalovat Open JDK na Ubuntu. To, zda již nějakou verzi Javy máte nainstalovánu zjistíte příkazem java -version.

java -version
openjdk 11.0.2 2019-01-15
OpenJDK Runtime Environment (build 11.0.2+9-Ubuntu-3ubuntu118.04.3)
OpenJDK 64-Bit Server VM (build 11.0.2+9-Ubuntu-3ubuntu118.04.3, mixed mode, sharing)

To, zda máte více verzí Javy zjistíte příkazem update-alternatives --config java.

update-alternatives --config java
There is only one alternative in link group java (providing /usr/bin/java): /usr/lib/jvm/java-11-openjdk-amd64/bin/java
Nothing to configure.

Jak je vidět z výpisu mám pouze jednu verzi Javy. Defaultní JDK nainstaluje takto:

apt-get install default-jdk
Reading package lists... Done
Building dependency tree
Reading state information... Done
default-jdk is already the newest version (2:1.11-68ubuntu1~18.04.1).

V tomto případě není co instalovat.

Idea IDE a česká klávesnice

Používáte vývojové prostředí Idea IDE a k tomu českou klávesnici? Je pravděpodobné, že máte problém s určitými znaky. Například se znaky [>{}. Řešením je nastavení hodnoty actionSystem.force.alt.gr v registru na true.

Postup:

V IDE stiskněte kombinaci kláves Ctrl + Shift + A a do vyhledávacího pole napište registry.

Nastavte hodnotu actionSystem.force.alt.gr na true.

Zdroj: youtrack.jetbrains.com/issue/IDEA-91975