Les fonctions de rappel sont assez simples en Java. La façon de le faire est de simplement définir une interface A qui a une seule méthode m(), puis ajouter une collection de type A à votre classe mondiale. Ensuite, à un certain point de votre objet World, vous voulez parcourir votre collection A et appeler la méthode m() sur chaque élément. Pour ajouter des "fonctions de rappel" à votre monde, vous définissez simplement une classe qui implémente votre interface A et la place dans la collection d'objets A de votre classe mondiale. Par exemple,
public interface CallbackFunction
{
public void execute(int a, int b);
}
public class World
{
List<CallbackFunction> callbackFunctions;
public void addCallback(CallbackFunction f)
{
callbackFunctions.add(f);
}
private void updateWorld()
{
// This loop could be anywhere in your World class
for(CallbackFunction f : callbackFunctions)
{
f.execute(<some int>, <some int>);
}
}
}
Ensuite, pour ajouter une fonction à votre monde:
world.addCallback(new CallbackFunction()
{
public void execute(int a, int b)
{
// Do some stuff
}
}
Je laisse le reste à vous, mais cela devrait vous donner une bonne idée de la façon dont les callbacks sont généralement mises en œuvre en Java .
Vous n'avez pas non plus besoin de stocker une collection générale de fonctions de rappel, vous pouvez avoir des fonctions de rappel spécifiques couplées à des méthodes particulières dans votre classe World. Par exemple, votre classe World peut avoir une méthode qui trie les choses en comparant deux éléments dans une collection. Pour déterminer si un objet doit aller avant ou après un autre, vous pouvez définir une interface CallbackFunction qui a une méthode qui prend 2 choses (comme int) et retourne une valeur qui indique quelle chose devrait aller en premier. Par exemple,
public interface CallbackForSorting
{
public int compare(int a, int b);
}
public class World
{
List<Integer> thingsToSort;
public void sortThings(CallbackForSorter sorter)
{
int result = sorter.compare(thingsToSort.get(i), thingsToSort.get(i+1));
if(result == 0) // elements are equal
if(result == -1) // thingsToSort.get(i) is "less than" thingsToSort.get(i+1)
if(result == 1) // thingsToSort.get(i) is "greater than" thingsToSort.get(i+1)
}
}
Bonne réponse, merci – jax