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

Die generische Klasse konsumieren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Lassen Sie sich vom Trainer in diesem Video zeigen, wie Sie die generische Klasse, die Sie mit Typ-Parametern versehen haben, verwenden. Der Fachbegriff für die Klasse, die die Typ-Parameter enthält, nennt sich Generics-Producer. Und die Klasse, die den Generics-Producer verwendet, nennt sich Generics-Consumer.

Transkript

In diesem Video zeige ich Ihnen, wie Sie die generische Klasse, die wir mit Generics versehen haben, verwenden. Der Fachbegriff für die Klasse, die die Generics enthält, nennt sich Generics Producer und die Klasse, die den Generics Producer verwendet, nennt sich Generics Consumer. In unserem Beispielprogramm ist es die Klasse App, die als Generics Consumer bezeichnet werden kann. Ich fange also an im Konstruktor und erst benötige ich eine Instanz der Klasse BMIKoerper. Ich schreibe also erstmal den Datentyp hin, BMIKoerper und dann den Variablen-Namen koerper und jetzt setze ich ein Gleichheitszeichen und weise diesen Variablen eine Instanz des Typs BMIKoerper zu. Also new BMIKoerper. Bei der Deklaration der Variablen Koerper, sehen Sie nun, dass mich Eclipse mit einer Warnung darauf hinweist, dass die Datentypen der inneren Elemente parametrisiert werden müssen. Denn hier steht BMIKoerper is a raw type. References to generic type BMIKoerper Hierauf zu verzichten ist grundsätzlich kein Fehler. In diesem Fall würden die beiden inneren Elemente E und F mit dem Datentype der Urvaterklasse Object erzeugt werden. Um die Typ-Parameter zu parametrisieren, führe ich jetzt aber neben dem Klassenbezeichner spitze Klammern hinzu und zwar dort – und ja, nebenbei gesagt, dass die beiden Datentypen mit der Urvaterklasse Object erzeugt werden sollen, kann ich auch durch Einsetzen von Fragezeichen definieren, also so, das würde auch funktionieren. Das ist gleichbedeutend mit keinem Typ-Parameter. Hierbei würde es sich nun um die Urvaterklasse Object handeln, mit denen die beiden inneren Elemente der Klasse BMI-Körper erzeugt werden. Aber das wollen wir ja nicht. Stattdessen setze ich an dieser Stelle genau die Datentypen ein, die ich für mein Programm an dieser Stelle benötige. Hierbei könnte ich jetzt jeden beliebigen Datentypen einsetzen. Eine Ausnahme bilden primitive Datentypen. Denn Generics dürfen nur mit Object- Datentypen parametrisiert werden. Deshalb muss ich für unser Beispiel die Wrapper-Klasse Double einfügen. Also ich schreib jetzt hier Double rein und hiermit habe ich dann festgelegt, dass zur Laufzeit auch dort Double stehen wird. Ich gehe nochmal kurz darauf ein, was die Laufzeitumgebung und der Compiler mit den Generics zu tun hat. Und zwar ist das so, wenn Sie mit Generics arbeiten, müssen Sie wissen, dass die Laufzeitumgebung nichts darüber weiß. Denn beiden Generics handelt es sich lediglich um ein Konstrukt, das der Compiler verwendet. Wenn der Compiler den Bytecode einer generischen Klasse erstellt, wird der generische Datentyp, den wir in dem Beispiel großes E genannt haben, durch den eingesetzten Datentypen ersetzt. Der Compiler schreibt also hier rein Double und hier auch, sodass zur Laufzeit dort auch dann ein Double verwendet wird. So kommen wir aber zurück zu unserem Beispiel. Genau die gleichen Datentypen, wie bei der Deklaration hier links, vor der Zuweisung, setze ich auch rechts, also bei der Initialisierung des Objekts ein. Und zwar hier, rechts neben dem Bezeichner schreibe ich Double, Double. Allerdings darf dies bei der Initialisierung des Objekts, also hier rechts auch weggelassen werden. So geht es also auch. Auf den Inhalt der spitzen Klammern, kann ich also rechts vom Gleichheitszeichen komplett verzichten. Hierbei spricht man vom sogenannten Diamond Operator. weil die eckigen Klammern an einen Diamenten erinnern. Der Diamond Operator sorgt dafür, dass der Compiler mit der Deklaration von hier links, von sich aus automatisch schlussfolgert, welcher Datentyp auf der rechten Seite der Zuweisung eingesetzt werden soll Und nun programmiere ich das Beispiel mal zu ende. Und zwar brauche ich zunächst mal einen Scanner, um die Benutzereingaben einzulesen. Den setze ich mit der Try-With-Resources-Technik in einen Try-Block ein. Ich schreibe alsoTry, runde Klammer auf und dann Scan und dann bleibe ich stehe, halte die Steuerungs-Taste gedrückt, drücke dann auf die Leertaste und Sie sehen, dass dann ein Kontextmenü aufgemacht wird, aus dem ich Scanner auswählen kann. Jetzt brauche ich noch eine Variable. Die nenne ich auch scanner = new Scan wieder Steuerungs-Taste, Leertaste, Kontextmenü und hier drin wähle ich dann den ersten Konstruktor auf Scanner(InputStream source) und als Übergabe-Parameter setze ich System.in hinein, denn dann kann ich die Benutzereingaben von der Konsole einlesen. Dann brauche ich eine geschweifte Klammer und innerhalb der Klammer gebe ich dann auf der Konsole aus, System.out.print, ohne Print-Line. Hier gebe ich dann aus Größe. Hiermit weise ich den Benutzer dann darauf hin, dass ich eine Groesse haben möchte. Und jetzt lese ich von der Benutzereingabe ein. Das ist dann scanner. Und zwar brauche ich einen Double- Wert und zwar nextDouble. Und diesen Wert werde ich dann direkt schon auch dem zuständigen Attribut auch in der Variablen Körper zuweisen. Ich sage also Körper.setE, das soll ja unserer Groesse sein. Und das gleiche brauche ich zweimal und zwar auch einmal für das Gewicht und hier muss es setF heißen. Und jetzt können wir den BMI-Wert ausrechnen. Die Formel des BMI-Wertes ist ja Gewicht durch Größe zum Quadrat, also sage ich double bmi = und dann koerper.getF geteilt durch (); und hier drin bilde ich dann das Quadrat von koerper.getE, indem ich es einfach mit sich selbst multipliziere. So und schon bin ich damit fertig. Ich habe jetzt hier einen gültigen Wert des Body Mass Index, der uns aussagen wird, ob unsere Katze Pinki übergewichtig ist oder nicht. Das Ganze gebe ich dann auch aus und zwar über System.out.printf und hier brauche ich erstmal ein Template BMI-Wert und mit %.1f sage ich dann aus, dass ich eine Nachkommastelle haben möchte. Dann setze ich noch die Variable bmi hinzu und bin fertig. So und das Ganze probieren wir auch nochmal aus. Ich reorganisiere die Imports noch über Strg + Shift + O, speichere das Programm ab, klicke dann auf Play. Jetzt werde ich auch nach der Groesse der Katze gefragt. Die Pinki ist 0,51 meter lang und ihr Gewicht ist 6,1 Kilo und der BMI-Wert ist 23,5 von der Pinki. In diesem Video habe ich Ihnen gezeigt, wie wir die Klasse, die wir mit Generics versehen haben, verwenden können. Im Generics-Producer haben wir hierfür eine Variable deklariert und bei ihr die für den Konsum erforderlichen Datentypen angezeigt. Dabei habe ich Ihnen auch das Fragezeichen als Wildcard vorgestellt, mit dem wir aussagen, dass ein beliebiger Datentyp eingesetzt werden kann. Rechts von der Zuweisung, also bei der Initialisierung der Generics Klasse, habe ich Ihnen den Diamond-Operator gezeigt. Der ist an dieser Stelle erlaubt, da Java von sich aus auf den Datentyp schließen kann, da er ja bei der Deklaration bereits angezeigt worden ist.

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!