© Excellent backgrounds/Shutterstock.com
Java Magazin
Multilingual: Scala-Code in Java-Applikationen

Just another Library?

Scala ist eine Sprache, die sehr nahe an Java ist - jedenfalls wenn es um den erzeugten Bytecode geht. Manche lassen sich sogar dazu hinreißen, Scala nur als eine weitere externe Bibliothek zu bezeichnen [1], so gut soll die Integration möglich sein. Ist das aber wirklich so? Und wenn nicht, welche Reibungspunkte gibt es?

Johannes Dienst


Video: Functional Thinking in Java 8, Clojure, Groovy and Scala

Scala wurde mit der Prämisse entwickelt, ein besseres Java zu sein. Dabei bedient es sich dem Multiparadigmenansatz, der objektorientierte und funktionale Programmierung in einer Sprache vereint. Gerade die funktionalen Aspekte und die pragmatische Mehrfachvererbung mit Traits sind echte Erleichterungen im Entwickleralltag.

In vielen Projekten ist es nicht wirtschaftlich und praktikabel, den kompletten Sourcecode direkt auf Scala umzustellen. Es bietet sich daher an, nur einzelne Schichten der Architektur umzuschreiben. Dabei stellt sich die Frage, wie das Zusammenspiel mit Java funktioniert. Bei der Recherche zu diesem Artikel bin ich auf allerlei falsche Interpretationen gestoßen, die bei Entwicklern entstehen können. Der wildeste Auswuchs davon dürfte die Annahme sein, dass es doch umständlich sei, ein Funktionsobjekt aus Scala in Java zu instanziieren und dann aufzurufen.

Die saubere Trennung der Schichten steht daher im Vordergrund. Es werden also einige grundlegende Fragen zu beantworten sein: Wie geht man zum Beispiel mit Scala Collections in Java-Code um? Oder wie fügen sich Traits in das Vererbungskonzept von Java ein?

ArtikelserieTeil 1: ClojureTeil 2: ScalaTeil 3: GroovyTeil 4: Jython

Wo geht die Reise hin?

Der Artikel betrachtet zuerst die Datentypen von Scala. Anschließend sind die Sprachfeatures an der Reihe, die in Java keinen vergleichbaren Gegenpart besitzen. Nachdem dieser unerfreuliche Punkt abgehandelt wurde, geht es Schritt für Schritt über Operatorüberladung, Tupel und Defaultparameter zu den mächtigen Collections, die nur noch mit leichten Tücken behaftet sind. Als Vorletztes kommt die Vererbung mit Traits auf den Prüfstand, die fast schmerzfrei mit Java interagiert. Den versöhnlichen Abschluss bilden dann Generics und statische Methoden in Companion-Objekten, die – wie nicht anders zu erwarten – sehr gut mit Java funktionieren.

Primitive Datentypen – Wie sieht’s in Scala aus?

In Scala gibt es im Gegensatz zu Java keine primitiven Datentypen, stattdessen wird jeder Datentyp als Objekt dargestellt. Im Hintergrund ist dafür ein Mechanismus wie das Un-/Boxing in Java verantwortlich. In Abbildung 1 ist die Hierarchie zu sehen, auf der die zugehörigen Klassen abgebildet sind.

Abb. 1: Datentypen in Bezug zur Scala-Typhierarchie

Wie aus dem Codebeispiel aus der Scala-Dokumentation [2] in Listing 1 hervorgeht, ist die Arbeit mit primitiven Datentypen dadurch um vieles einfacher.

...

Java Magazin
Multilingual: Scala-Code in Java-Applikationen

Just another Library?

Scala ist eine Sprache, die sehr nahe an Java ist - jedenfalls wenn es um den erzeugten Bytecode geht. Manche lassen sich sogar dazu hinreißen, Scala nur als eine weitere externe Bibliothek zu bezeichnen [1], so gut soll die Integration möglich sein. Ist das aber wirklich so? Und wenn nicht, welche Reibungspunkte gibt es?

Johannes Dienst


Video: Functional Thinking in Java 8, Clojure, Groovy and Scala

Scala wurde mit der Prämisse entwickelt, ein besseres Java zu sein. Dabei bedient es sich dem Multiparadigmenansatz, der objektorientierte und funktionale Programmierung in einer Sprache vereint. Gerade die funktionalen Aspekte und die pragmatische Mehrfachvererbung mit Traits sind echte Erleichterungen im Entwickleralltag.

In vielen Projekten ist es nicht wirtschaftlich und praktikabel, den kompletten Sourcecode direkt auf Scala umzustellen. Es bietet sich daher an, nur einzelne Schichten der Architektur umzuschreiben. Dabei stellt sich die Frage, wie das Zusammenspiel mit Java funktioniert. Bei der Recherche zu diesem Artikel bin ich auf allerlei falsche Interpretationen gestoßen, die bei Entwicklern entstehen können. Der wildeste Auswuchs davon dürfte die Annahme sein, dass es doch umständlich sei, ein Funktionsobjekt aus Scala in Java zu instanziieren und dann aufzurufen.

Die saubere Trennung der Schichten steht daher im Vordergrund. Es werden also einige grundlegende Fragen zu beantworten sein: Wie geht man zum Beispiel mit Scala Collections in Java-Code um? Oder wie fügen sich Traits in das Vererbungskonzept von Java ein?

ArtikelserieTeil 1: ClojureTeil 2: ScalaTeil 3: GroovyTeil 4: Jython

Wo geht die Reise hin?

Der Artikel betrachtet zuerst die Datentypen von Scala. Anschließend sind die Sprachfeatures an der Reihe, die in Java keinen vergleichbaren Gegenpart besitzen. Nachdem dieser unerfreuliche Punkt abgehandelt wurde, geht es Schritt für Schritt über Operatorüberladung, Tupel und Defaultparameter zu den mächtigen Collections, die nur noch mit leichten Tücken behaftet sind. Als Vorletztes kommt die Vererbung mit Traits auf den Prüfstand, die fast schmerzfrei mit Java interagiert. Den versöhnlichen Abschluss bilden dann Generics und statische Methoden in Companion-Objekten, die – wie nicht anders zu erwarten – sehr gut mit Java funktionieren.

Primitive Datentypen – Wie sieht’s in Scala aus?

In Scala gibt es im Gegensatz zu Java keine primitiven Datentypen, stattdessen wird jeder Datentyp als Objekt dargestellt. Im Hintergrund ist dafür ein Mechanismus wie das Un-/Boxing in Java verantwortlich. In Abbildung 1 ist die Hierarchie zu sehen, auf der die zugehörigen Klassen abgebildet sind.

Abb. 1: Datentypen in Bezug zur Scala-Typhierarchie

Wie aus dem Codebeispiel aus der Scala-Dokumentation [2] in Listing 1 hervorgeht, ist die Arbeit mit primitiven Datentypen dadurch um vieles einfacher.

...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang