Eine Option verwendet java.lang.reflect.Method
, wie in Bozho Antworten erläutert. Es ist sehr flexibel, aber die Hauptnachteile sind, dass Sie die Sicherheit aller Typen verlieren - es gibt keine Überprüfung, dass Sie die Methode mit den richtigen Parametern aufrufen (und den richtigen Rückgabetyp erwarten).
Also, wenn Sie später die Methode ändern und vergessen, alle Anrufer zu ändern, werden Sie nur zur Laufzeit (durch eine ClassCastException
) herausfinden. Auch der Methodenname wird nur zur Laufzeit geprüft (weil Sie ihn namentlich holen.
Alternativ können Callbacks über Schnittstellen verwendet werden. Eine Methode, die eine andere Methode als Parameter akzeptieren will, erwartet nur eine Instanz einer bestimmten Schnittstelle. Die Schnittstelle hat nur eine Methode, doStuff
.So können Sie Instanzen erstellen, die die Schnittstelle implementieren, und diese an die Methoden übergeben.Das ist ein wenig ausführlicher (weil Sie die Schnittstelle benötigen), aber typsicher und somit einfacher zu refactor.Nachricht
Das ist mehr oder weniger die command pattern, BTW.
dupe?http://StackOverflow.com/Questions/1073358/Function-Pointers-in-Java – spacemanaki
Oder dupe davon: http://StackOverflow.com/Questions/2186931/Java-Pass-Method-AS-Parameter – sleske