Webbrowser-Programmierung in Java

Seite 2: Taschenrechner in Java

Inhaltsverzeichnis

Eine einfache Taschenrechner-Klasse (Calculator.java) in Java dient als Basis, die dann in der JavaScript-App landen soll. Die Taschenrechner-Klasse bietet eine Methode zur Berechnung von Summen namens calculateSum an. Die Implementierung geschieht wie folgt:

...
public double calculateSum(Double[] values) {
List<Double> doubles = Arrays.asList(values);
if (values != null) {
logger.info("Values size: " + doubles.size());
Double sum = doubles.stream().mapToDouble(
Double::doubleValue).sum();
return sum;
} else {
logger.info("Values: null");
return 0.0;
}
}
...

Die Taschenrechner-Klasse können Entwickler wie gewohnt mit JUnit und nach Bedarf mit Mockito testen. Die Testklasse können Anwender in ihrer gewohnten Java-IDE wie Eclipse, IntelliJ oder VS Code for Java implementieren (Abbildung 2).

Taschenrechner-Testklasse in JUnit (Abb. 2)

Um die Taschenrechner-Klasse in JavaScript zu benutzen, müssen Entwickler das Framework JsInterop von GWT oder J2CL verwenden. JsInterop ist ein Framework für die Interoperabilität zwischen JavaScript und Java. Sowohl GWT als auch J2CL verwenden es, um auf JavaScript zuzugreifen oder umgekehrt von JavaScript darauf zuzugreifen. Im Prinzip markiert es Java-Klassen und -Methoden, damit der Transpiler die richtigen JavaScript-Quellcodes generieren kann. Die Arbeitsweise von JsInterop zeigt Abbildung 3.

Arbeitsweise von JsInterop (Abb. 3)
Mehr Infos

Weiteres zu JsInterop

Folgende Websites bieten gute Informationen zu JsInterop:

Im Beispiel müssen Anwender die Taschenrechner-Klasse in eine JavaScript-Datei exportieren. Die Implementierung der Taschenrechner-Klasse steht in Java zur Verfügung. Somit stellt sie den ersten Fall aus Abbildung 3 dar. Dazu ist lediglich die Kennzeichnung der Taschenrechner-Klasse mit einer @JsType-Annotation nötig, die global mit dem Namen "Calculator" verfügbar sein soll.

...
@JsType(namespace = JsPackage.GLOBAL)
public class Calculator {


public double calculateSum(Double[] values) {
...
}
}
...