Функции обратного вызова довольно просты в Java. Способ сделать это - просто определить некоторый интерфейс A, который имеет единственный метод m (), а затем добавить коллекцию типа A в ваш класс World. Затем в какой-то момент в вашем объекте World вы хотите перебрать коллекцию A и вызвать метод m () для каждого элемента. Чтобы добавить «функции обратного вызова» в ваш Мир, вы просто определяете некоторый класс, который реализует ваш интерфейс A, и помещаете его в коллекцию объектов A в вашем классе World. Например,
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>);
}
}
}
Затем, чтобы добавить функцию в ваш Мир:
world.addCallback(new CallbackFunction()
{
public void execute(int a, int b)
{
// Do some stuff
}
}
Я оставляю все остальное на ваше усмотрение, но это должно дать вам хорошее представление о том, как обратные вызовы обычно реализуются в Java.
Вам также не нужно хранить общую коллекцию функций обратного вызова, у вас могут быть определенные функции обратного вызова в сочетании с конкретными методами в вашем классе World. Например, ваш класс World может иметь некоторый метод, который сортирует вещи, сравнивая два элемента в коллекции. Чтобы определить, должен ли один объект идти до или после другого, вы можете определить интерфейс CallbackFunction, у которого есть метод, который принимает 2 вещи (например, int) и возвращает значение, которое указывает, какая вещь должна идти первой. Например,
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)
}
}