# Java Callback Erklärung



## Fulk (8. September 2008)

Hallo!

Könnte mir jemand bitte das Callback-Prinzip/Callback-Methoden in Java erklären? Ich habe zwar(glaube ich) verstanden was es bedeutet (http://de.wikipedia.org/wiki/Rückruffunktion), aber wie setzt man es nun richtig/konkret in Java um?

Das Beispiel von Thomas aus dem Forenbeitrag http://www.tutorials.de/forum/java/203210-callback-methoden.html konnte ich nicht nachvollziehen.

Vielen Dank!
Fulk.


----------



## Klein0r (8. September 2008)

In Java ist das ganze nicht so einfach wie da beschrieben. Da müsste man schon auf Interfaces zurückgreifen.

Das ist aber in dem von dir verlinkten Thread schon beschrieben.
Verstehe deine Frage nicht ganz?!

Genutzt wird sowas z.B. bei Compare-Funktionen. Dabei kann man ein Array von Objekten (oder eine Liste) einfach an eine vordefinierte Funktion einer Utility-Klasse übergeben.
Diese Klasse kümmert sich nur um das sortieren (vergleichen, tauschen, ...). Wie genau aber sortiert werden soll hast du Anhand einer von dir geschriebenen Compare-Funktion beschrieben.

Schwer zu erklären.
Falls dir sonst keiner hilft und du es nicht verstehst kann ich dir nen Codebeispiel geben wenn ich heute abend zu Haus bin.

lg


----------



## takidoso (8. September 2008)

Generell (mal prozedural erklärt) bedeutet Callback-Funktion doch nur, dass eine Funktion oder Procedur *a* mittels einer für sie vereinbarten Funktionssignatur Funktionen, die dieser Signatur folgen,  als Parameter *b* aufnimmt und zu algorithmisch gegebener Zeit aufruft. Für solch einen "prozeduralen Polymorphismus" ist die Sprache C mittels Funktionszeigern befähigt.

Objektorientiert und Java-spezifisch erklärt wäre es in etwa folgendermaßen...
Eine Klasse *a* ist in der Lage, Objekte, die ein definiertes Interface *b* implementieren, zu registrieren, um innerhalb ein oder mehrerer eigener Methoden diese Objekte mittels der Methodensignature des vereinbarten Interface zu algorithmisch gegebener Zeit aufzurufen. 

```
class a
{
   b callBackObjekt = null;
   void registiereB (b callBackObj)
   {
      callBackObjekt = callBackObj;
   }

   void machKomplexesZeug()
   {
        ...
        callBackObjekt.machDies(lustigerParameter)
        ...
        callBackObjekt.machDas(witzigerParameter);

   }
}

interface b
{
   void machDies(int lustigerInt);
   void machDas(String witzigerString);
}

class irgendeineKlasse implements b
{
   void machDies(int lustigerInt)
   {
      ....
   }
   
   void machDas(String witzigerString)
   {
     ...
   }
}
```

Die meisten  Design-Pattern sind IMHO erweiterte Callback-Prinzipien. Typisches Beispiel: Listener-Observer-Pattern. Der spezielle Unterschied zum "gewöhnlichen" CallBack ist lediglich der, dass gleich mehrere registrierte Listener-Objekte vom Observer innerhalb einer Schleife aufgerufen werden. Diese Aufrufe kann man als eine Art Trigger für die Listener ansehen.


----------

