Wie übergebe ich einer Methode einer weitere Methode als Parameter?

... komplette Frage anzeigen

4 Antworten

In Java sind Funktionen keine first class objects - das heißt du kannst sie nicht direkt übergeben. Übergeben werden können nur primitive Datentypen (boolean, int, double, ...) und Objekte. In deinem genannten Beispiel willst du immer bekannte Methoden aufrufen, insofern kannst du einfach ein Objekt übergeben und auf diesem die Methoden aufrufen - oder du verwendest "this" um die methoden auf dem selben Objekt aufzurufen, auf dem auch beamerAusUndFensterAuf aufgerufen wurde.

public boolean beamerAusUndFensterAuf(Beamer b, Fenster f) {
this.fensterOeffnen(f);
this.beamerEinschalten(b);
return true;
}

Wenn du eine Funktion übergeben willst, musst du entweder Reflections verwenden (was in vielen Fällen overkill ist) oder die Funktion in einem Objekt einpacken. Dafür gibt es verschiedene Interfaces, z.B. Callable, Function, BiFunction, Supplier und Consumer. Diese definieren jeweils eine einzelne Funktion, die dann auf dem übergebenen Objekt aufgerufen werden. Seit Java 8 gibt es die möglichkeit, solche (und andere) Objekte durch einen Lambda-Ausdruck einzugeben.

Antwort bewerten Vielen Dank für Deine Bewertung

kannst du bitte deinen gesamten Code posten auf 

http://ideone.com/ und dann deinen link (also deine URL) hier posten

Antwort bewerten Vielen Dank für Deine Bewertung

Ich würde nun gern eine Methode beamerausfenster() erstellen welche die Methoden beamerausschalten() und fensteroeffnen() als Parameter übernimmt da bereits in den jeweiligen Methoden die Prüfung der Referenz eingebunden ist. 

Eine Methode übergeben funktioniert "nicht einfach so" und wäre wohl auch fehl am Platz. Daher gehe ich hier jetzt nicht genauer ein. 

Aber schauen wir uns mal den Rest an:

In der Personenklasse sind die Methoden beamerausschalten() und fensteroeffnen() eingebaut

class Person {

   void beamerAusschalten(){};

   void fensterOeffnen(){};

}

class Beamer {}

class Fenster {}

Des weiteren geht daraus hervor, dass beide Methoden Parameter entgegen nehmen und einen boolean wert zurück liefern.

Die Methode "beamerAusFenster" soll die Summe aus beiden Bedingungen abbilden.:

class Person {
   boolean beamerAusschalten(Beamer beamer) {
      ...
      return ...
   }

   boolean fensterOeffnen(Fenster fenster) {
      ...
      return ...
   }

   boolean beamerAusFenster(Beamer beamer, Fenster fenster) {
       return beamerAusschalten(beamer) && fensterOeffnen(fenster);
   }
}

Die Methode beamerAusFenster nimmt nur die Parameter entgegen, welche deine anderen beiden Methoden benötigen.

Deine Methode soll ja einen RÜckgabewert haben, gib hier entsprechend das Ergebnis von "beamerAusschalten" und "fensterOeffnen" kombiniert mit einer "UND"-Verknüpfung als Rückgabewert an.

Antwort bewerten Vielen Dank für Deine Bewertung

Warum übergibst du dieser Methode nicht einfach Fenster f und Beamer b und rufst die anderen Funktionen von da aus auf? Ich verstehe nicht genau, was du da erreichen willst indem du Funktionen übergibst?

Antwort bewerten Vielen Dank für Deine Bewertung