Моя программа сильно использует (возможно) асинхронные вызовы, где возвращаемое значение не доступно сразу, поэтому существует много таких способов:
// A simple callback interface
public interface GetFooCallback
{
void onResult(Foo foo);
};
// A method that magically retrieves a foo
public void getFoo(long fooID, GetFooCallback callback)
{
// Retrieve "somehow": local cache, from server etc.
// Not necessarily this simple.
Foo foo = ...;
callback.onResult(foo);
}
Однако, поскольку есть много вещей, которые зависят от последнего вызова, подобного этому, они начинают накапливаться:
// Get foo number 42
fooHandler.getFoo(42, new GetFooCallback()
{
@Override
public void onResult(final Foo foo)
{
// Foo 42 retrieved, get a related Bar object
barHandler.getBar(foo.getBarID(), new GetBarCallback()
{
@Override
public void onResult(final Bar bar)
{
// Send a new Zorb(foo, bar) to server
zorbHandler.sendZorbToServer(new Zorb(foo, bar), new ZorbResponseHandler()
{
@Override
public void onSuccess()
{
// Keep dancing
}
@Override
public void onFailure()
{
// Drop the spoon
}
});
}
});
}
});
Это "работает", но он начинает чувствовать себя довольно нехорошо, когда куча продолжает расти, и трудно отслеживать, что происходит. Итак, вопрос в следующем: как мне избежать этого нагромождения? Поскольку я googled "callback hell", во многих местах предлагается RxJava или RxAndroid, но на самом деле я не нашел примеров, показывающих, как можно преобразовать что-то вроде вышеупомянутого примера в более сжатое целое.