Java Lambda Ausdruck in äquivalente Definition einer anonymen Klasse

sasbro97 schrieb:
So hab ich nun zwar keine Fehler, aber das war es auch. Ist bestimmt auch nicht das Richtige.

Noch nicht ganz. Aber ein Ratespiel sollte es nicht werden.

sasbro97 schrieb:
Von MathOperation kann ich gar nichts
erstellen.

Die Templatefunktion funktioniert leider je nach Kontext unterschiedlich. Wenn Du die anonyme Klasse in der main-Methode erstellst, sollte "new MathOp" reichen. Ansonsten muss Du die Felddeklaration ausschreiben.

Aber davon ab, fällt Dir der (kleine) Unterschied zwischen Deiner ersten Lösung und der per Template erstellen Klasse nicht auf?
 
Ich versteh dieses ganze Thema leider überhaupt nicht und find das nur furchtbar und werd das wahrscheinlich auch sehr selten nur brauchen, aber ja in der Main-Methode ging nun:
Java:
 new MathOperation() {
            
            @Override
            public int operation(int a, int b) {
                // TODO Auto-generated method stub
                return 0;
            }
        };
 
Jetzt noch den Return-Typen ändern und die Ausgabe hinzufügen und schon hast Du Deine Lösung.

Das Verstehen kommt mit der Auseinandersetzung. Dauert manchmal. Aber dafür sind diese Übungen ja gedacht. Schadet natürlich auch nicht, entsprechende Dokumentation zu wälzen.

Ich würde den Code mit den Anfangsbeispiel vergleichen, damit Du den Syntaxfehler dort findest. Ist nur eine Kleinigkeit, aber jedes Zeichen zählt.
 
Nein, wenn ich den return Typ zu void ändere, muss der vom Interface auch geändert werden. Dann würden die alten Versuche mit den Lambda ausdrücken nicht mehr funktionieren. Also kann es ja nicht dasselbe sein. Ich versteh das einfach nicht.
 
Mit diesem Ausgangsbeispiel

Java:
IOperation operation = (a,b) -> System.out.println (a*b);

muss der Return Type void sein. Darauf habe ich mich bezogen. Falls die Bedingungen doch andere sind, solltest Du die Aufgabenstellung noch mal genau schildern.

Sinnvoll wäre void für das Interface in der Tat nicht. Aber Du kannst den Code in der anonymen Klasse ja leicht ändern und den Wert der Operation nicht nur ausgeben, sondern auch zurückgeben.
 
Also grundsätzliches Verständnis. Man deklariert in der Klasse immer ein Interface mit der eigentlichen Methode. Egal ob man Lambda oder anonyme Klasse benutzt. Der Rest wird in der main-Methode ausgeführt. Und die Aufgabenstellung:

Überführe den Lambda Ausdruck in Zeile 3 in die äquivalente Definition in einer anonymen Klasse. Zeile 3: IOperation operation = (a,b) -> System.out.println (a*b);
 
sasbro97 schrieb:
Also grundsätzliches Verständnis. Man deklariert in der Klasse immer ein Interface mit der eigentlichen Methode.

Meist gehört ein Interface in eine eigene Datei.

Um Lambdas benutzen zu können, benötigt man ein "funktionales Interface" - ein Interface mit genau einer Methode. (Anonyme Klassen kann man auch mit Klassen benutzen).

sasbro97 schrieb:
Egal ob man Lambda oder anonyme Klasse benutzt.

Lambdas sind vereinfacht ausgedrückt eine alternative, komprimierte Schreibweise für (bestimmte) anonyme Klassen. Man kann deren Funktion - wie die Übung zeigt - auch mit anonymen Klassen realisieren.

sasbro97 schrieb:
Der Rest wird in der main-Methode ausgeführt.

main-Methoden sind die Ausnahme. Der Code wird dort ausgeführt, wo er nun mal hingehört.


sasbro97 schrieb:
Und die Aufgabenstellung:

Überführe den Lambda Ausdruck in Zeile 3 in die äquivalente Definition in einer anonymen Klasse. Zeile 3: IOperation operation = (a,b) -> System.out.println (a*b);

Dann ist void korrekt. Ich hatte oben ja schon mal gefragt, ob "IOperation" bekannt ist. Scheint also nicht der Fall zu sein.
 
Zurück
Oben