Unsere Datenschutzrichtlinie wird in Kürze aktualisiert. Bitte sehen Sie sich die Vorschau an.

Scala Grundkurs

Typenkonvertierung zwischen Java und Scala

Testen Sie unsere 2015 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Da Java und Scala jeweils über eigene Listentypen verfügen, ist es notwendig, zwischen diesen beiden Sprachen eine Konvertierung durchzuführen. Erfahren Sie in diesem Film, wie Sie dazu vorgehen müssen.

Transkript

Interaktionen zwischen Java und Scala laufen weitestgehend reibungsfrei. Allerdings gibt es noch ein besonderes Problemfeld und das sind die Listentypen, die innerhalb von Scala sich von denen von Java unterscheiden. Aus genau diesem Grund muss man hier zwischen beiden Welten Konvertierungen vornehmen. Ich nehme Sie nun mit auf die Reise durch genau diese Konvertierungen. Dabei beginne ich zunächst einmal in meiner Applikation. In dieser Applikation gibt es also einen Kunden, es gibt einen Warenkorb, es gibt ein Bankkonto es gibt Preise für Produkte und Produkte, als auch einen Onlineshop und eine Rechnung, die zum Schluss gedruckt wird. Aktuell gibt es Drucker für diese Rechnung. Unglücklicherweise ist der Drucker Treiber aber in Java geschrieben. Und die API auf den Printer Tools ist äußerst schwierig zu benutzen, denn initial muss ich hier einen Printer Treiber registrieren. Dafür verwende ich also eine Liste von Printer Treibern, die ich bereitstellen möchte. Und danach kann ich später nach einem bestimmten Printer Treiber anhand des Namen suchen und erhalte in dem Fall wiederum eine Liste zurück. Ein Printer Treiber als solches hat aktuell nur einen Namen. Sollte er zum Drucken benutzt werden, so nimmt er einen Text entgegen und gibt diesen auf die Konsole aus. Die API mag nun nicht die Schönste sein, aber genau diesen Problemen begegnet man üblicherweise bei der Interaktion mit Java Klassen. Als erstes möchte ich also nun Printer Treiber registrieren. Dafür konvertiere ich nun meine Printer in Printer Treiber. Zunächst einmal verwende ich also eine Referenz auf die statische Methode "registerPrinterDriver()" Dieser erwartet nun also, eine Java Liste von Printer Treibern von mir. Ich allerdings beginne nun mit einer Liste von Printern, die ich aktuell besitze. In dem Fall also dem USB Printer und dem Network Printer. Tatsächlich benötige ich aber nun also Printer Driver. Das heißt, ich nutze also wie für Scala üblich die Funktion "map" und erzeuge nun aus einem solchen Printer einen Printer Driver. Dafür benötige ich nur noch den Namen des Printer. Aktuell ist dieser nicht sichtbar. Das bedeutet, ich gebe das Feld Name nun nach außen frei und verwendet es nun bei der Erzeugung des Printer Driver. Schaffen wir hier noch etwas Ordnung. Habe ich nun tatsächlich das Problem, dass ich hier eine Scala Liste habe, aber tatsächlich eine Java Liste erwartet wird. Für genau diese Problematik, bietet Scala sogenannte Java Conversions an. Diese importiere ich nun, über JavaConverters und einem Underscore, um entsprechend hier alle Objekte, die sich unterhalb von JavaConverters befinden, zu importieren. Automatisch erhalte ich nun auf meiner Skala Liste eine zusätzliche Funktion mit der Bezeichnung "asJava". In dem Moment wird nun meine Scala Liste, in eine Java Liste konvertiert. Selbstverständlich findet das nicht statt, indem eine neue Liste erzeugt wird, sondern Scala baut hier einen Adapter, der eine Scala Liste so zur Verfügung stellt, dass sie als Java Liste verwendet werden kann. An der Stelle habe ich nun also meine Printer Treiber erzeugt. Als nächstes möchte ich nun mit einem Printer einen solchen Printer Treiber auch nutzen. Dafür begebe ich mich also in den Printer selbst und verändere nun hier die Implementierung. Statt direkt auf die Konsole zu drucken, nutze ich nun die Printer Tools. Dort suche ich nach einem Printer Driver, dessen Name ist also der Name meines Printers, Das heißt, ich finde genau den Treiber für meinen Printer. Und nun benötige ich also eine Scala Liste, denn das Ergebnis dieser Operation ist eine Java Liste. Mit dieser kann ich nicht, die von Scala üblich gewohnten Methoden nutzen. Das bedeutet auch wiederum, hier benötige ich einen Import der JavaConverters und daraufhin definiere ich nun mit der Funktion "asScala" eine Sala Liste. Nun kann ich beispielsweise, dadurch, dass die API nicht allzu schön gestaltet ist und ich im Normalfall nur ein Element brauche, direkt auf das oberste Element zugreifen. Nun könnte es natürlich sein, dass dieses Element nicht existiert. Deshalb verwende ich nun nicht den Aufruf "head", um das oberste Element immer zu selektieren, sondern das Element "HeadOption", so dass ich nur falls ein solches Element existiert, auch tatsächlich den Druck vornehmen kann. Sollte also dieses Element existieren, kann ich daraufhin mit dem Print Aufruf die Rechnung in einer Stringform ausdrucken. Und genau so konnte ich nun die Rechnung über einen Printer Treiber innerhalb von Java drucken, statt innerhalb meiner eigenen Scala Implementierung. Dank der Möglichkeiten, die mir die JavaConverters von Scala bieten, kann ich die Kompatibilität zu Java Frameworks und Libraries erhalten. Die Methoden sind damit automatisch unterhalb von JavaConverters implementiert und ich muss lediglich einen Underscore-Import machen oder auch Wildcard-Import genannt. In dem Fall erhalte ich also die Möglichkeiten, eine Java Liste im Scala zu verwandeln mithilfe der Funktion "asScala" oder umgekehrt eine Scala Liste im Java zu verwandeln mit "asJava". Eine Übersicht über die Konvertierungen zwischen Scala und Java findet man in der Scala Dokumentation unter JavaConverters. Hier ist eine genaue Auflistung der Konvertierungen zwischen den verschiedenen Typen in Scala und Java. Im Normalfall findet diese Umwandlung so statt, dass ein Adapter erzeugt wird. Das bedeutet, dass eine Liste daher nicht kopiert und neu erzeugt wird, sondern lediglich, dass ein Adapter dabei hilft, dass eine Java Klasse auf die Scala Liste zugreifen kann und umgekehrt.

Scala Grundkurs

Entdecken Sie die Möglichkeiten und Eigenschaften der modernen Programmiersprache Scala.

4 Std. 44 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Exklusiv für Abo-Kunden
Erscheinungsdatum:12.04.2017

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!