Viele von uns kennen das Problem der NullPointer - Exceptions sehr gut. Die Erfindung der null-Referenz bezeichnet Tony Hoare selbst als seinen Milliarden Dollar Fehler.

Darüber hinaus ist lange Jahre aufgrund diverser Lizenzfragen die Weiterentwicklung von Java beinah eingeschlafen. So ist etwa in der aktuellen Android - Entwicklungsumgebung die verwendete Java Version mittlerweile 8 Jahre alt.

Als Folge dieser Umstände sind speziell im Bereich des mobile Computings viele Programmiersprachen entstanden, die versuchen einerseits das NullPointer Problem syntaktisch in den Griff zu bekommen und andererseits die funktionale Programmierung und das Multithreading einfacher zu handhaben. Man denke zum Beispiel an Kotlin und Swift. Dadurch müssen Entwickler viel Zeit investieren um sich auf der jeweiligen Platform einzuarbeiten.

Andere Entwickler verzichten komplett auf die native Programmierung und implementieren statt dessen kleine Webseiten. Solche Apps lassen sich zwar im Marketing als “native” bezeichnen. Tatsächlich handelt es sich aber um immer die gleiche Kopie einer Standard-App, die als Hauptfenster ein Browser Fenster (WebView) startet und dort die Javascript/Typescript Anwendung ausführt.

der Turmbau zu Babel

Android bietet - vielleicht nicht zuletzt wegen der angesprochenen Probleme - auch die Möglichkeit mit Kotlin zu arbeiten. Ohne besondere Mühe kann man aber für statt dessen in Android die Version auf Java 8 umstellen, dann hat man es mit einer nur mehr knapp 7 Jahre alten Sprachversion zu tun und immerhin Lambdas zur Verfügung. Mit einfacher Konfiguration unterstützt Android aber auch Java 11 und höher. In unserem Beispiel verwende ich Java 11, da dies derzeit die aktuelle LTS1 Version ist.

Wenn man die aktuellen Sprachfeatures dieser Java-Version werwendet, wird das Programmieren der Anwendungen wieder angenehm und leicht. Einige der Dinge, die Java 11 kompensiert:

  • Vermeidung von NullPointer Exception durch die Disziplin keine null Referenzen zurück zu gegeben sondern statt dessen Java Optional zu verwenden
  • Lambda Ausdrücke anstatt Runnables
  • CompletedFuture anstatt AsyncTask, der mittlerweile auch deprecated ist
  • Java Streams API anstatt for und while oder do Schleifen
  • Vermeidung der redundanten Anführung der Datentypen durch das var - Keyword und den Diamond-Operator

Wenn man dann zusätzlich wie andere Sprachen etwas großzügiger mit private und Gettern/Settern umgeht, wird der Java Code sehr kompakt.

Diskussionen, ob Kotlin tatsächlich so viel mächtiger als Java ist sollte man also vielleicht erst führen, wenn man einige Zeit mit einer aktuellen Java Version gearbeitet hat.

Ein konkretes Beispiel finden Sie hier.