Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java Grundkurs 3: Generische Programmierung, Datenströme, Datumsrechnung

Effektiv gesehen "final"

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Lassen Sie sich vom Trainer zeigen, wie Sie innerhalb eines Lambda-Ausdrucks auf Konstanten, Objekt-Variablen und auch lokale Variablen der umgebenden Blöcke zugreifen. Das Besondere hierbei ist, dass dies nur gelingt, wenn die Werte der Variablen effektiv gesehen final sind.

Transkript

In diesem Video steigen wir weiter in die Syntax des Lambda-Ausdrucks ein. Dabei lernen Sie zum Beispiel, dass öffentliche Konstanten und Objekt-Variablen innerhalb eines Lambda-Ausdrucks grundsätzlich referenziert werden dürfen. Um Ihnen dies vorzuführen, werde ich die Variable "Groesse" hier oben als Objektvariable deklarieren. Der Objektvariablen "Groesse" werde ich im Konstruktor den Wert 0,51 zuweisen, weil dies ja die Größe der Katze "Pinki" ist. Also gehe ich hier hin und schreibe dann "groesse = 0,51". Diese Variable werde ich nun innerhalb des Lambda-Ausdrucks verwenden. Daher brauche ich sie nicht mehr als Übergabe-Parameter anzuzeigen. Weil ich meinem Lambda-Ausdruck, also nur noch einen einzigen Parameter übergebe, muss ich dies auch noch so im Functional-Interface und im Lambda-Ausdruck definieren. Ich beginne mal mit dem Functional Interface. Also brauche ich hier diesen ersten Übergabe-Parameter nicht mehr und das speichere ich so ab. Jetzt muss ich den Parameter "Groesse" in den runden Klammern hier entfernen. Und da ich nun nur noch einen Parameter definiere, kann ich auch auf die runden Klammern verzichten und deshalb würde das jetzt so genügen. Und der Aufruf der Methode "rechne" muss natürlich auch lediglich mit dem einen Parameter "Gewicht" erfolgen. Also hierdrauf kann ich dann auch verzichten. Wie Sie sehen, funktioniert das Beispiel nun genau so, denn hier im Lambda-Ausdruck verwende ich die Objekt-Variable "Groesse" von hier oben. Was auch noch möglich ist, ist dass die außerhalb, also die in der umschließenden Methode deklarierten, lokalen Variablen referenziert werden. Auch dies werde ich Ihnen vorführen. Hierfür entferne ich mal die Objektvariable und deklariere eine lokale Variable innerhalb des Konstruktors, "double groesse", und in diese Variable initialisiere ich eine Anweisung weiter mit dem Wert "0,51". Nun verwendet der Lambda-Ausdruck eine lokale Variable, der sie umschließenden Methode. Das funktioniert also auch. Allerdings muss man hierbei beachten, dass der Wert der Variablen nach der Initialisierung unverändert bleibt. Um Ihnen des zu zeigen, initialisiere ich die Variable in dieser Anweisung hier oben zunächst mal mit "0,0", also so. Aber nun sehen Sie, dass mir Eclipse einen Fehler anzeigt, wenn wir mit der Maus über die Variable "groesse" wandern, erhalten wir die Meldung: "Local variable groesse defined in an enclosing scope must be final" "or effectively final". Auf Deutsch heißt das, dass wir lediglich eine Konstante oder eine sich nicht verändernde Variable verändern dürfen. Konstanten sind Ihnen bei Java ja bereits bekannt, aber womöglich hören Sie von Variablen, bei denen sich der Wert nicht verändert, zum ersten Mal. Schauen wir uns das mal genauer an Zunächst setze ich das Schlüsselwort "final" vor die Variable und initialisiere sie mit "0,51", also so. "final double groesse" "= 0,51". So, nun haben wir es mit einer lokalen Konstanten zu tun. Dies ist ja explizit erlaubt und nun entferne ich das Schlüsselwort "final" und wie Sie sehen, ist dies ebenso erlaubt, weil der Compiler merkt, dass ich der Variablen "groesse" kein zweites Mal einen Wert zuweise. Nebenbei gesagt, handelt es sich hierbei um einen Mechanismus, der seit Java Version 8 neu ist. Denn bis zu Java Version 7 war es so, dass innerhalb einer anonymen oder inneren Klasse lediglich Konstanten referenziert wurden durften. Da es sich beim Lambda-Ausdruck um nichts anderes, als eine anonyme Klasse handelt, wäre es dann hier genauso. Aber diese Regel wurde in der Java Version 8 aufgeweicht. Worauf es dem Compiler seitdem hier ankommt, ist dass die Variable nicht abgeändert wird. Denn der Compiler verlässt sich während der Kompilierung immer noch darauf, dass es sich um einen konstanten Wert handelt. Der englische Fachbegriff lautet, "Effectively Final". In diesem Video habe ich Ihnen erklärt, dass Sie innerhalb eines Lambda-Ausdrucks auf konstante Objektvariablen und auch auf lokale Variablen, der umgebenden Blöcke zugreifen können. Allerdings gelingt das nur, wenn die Werte der Variablen effektiv gesehen final sind.

Java Grundkurs 3: Generische Programmierung, Datenströme, Datumsrechnung

Steigen Sie tiefer in die Java-Programierung ein und lernen Sie den Umgang mit generischen Typen, Lamda-Ausdrücken, DAtenströmen und mit Datums- und Zeitberechnung.

5 Std. 24 min (47 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:09.10.2016

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!