Вы не можете передавать аргументы call()
, потому что сигнатура метода не позволяет этого, но вот как минимум один способ обойти это,
- определение абстрактного класса, который охватывает / реализует
Callable
и
- внедряет установщик для "внедрения" результата в
call()
Определите абстрактный класс:
import java.util.concurrent.Callable;
public abstract class Callback<T> implements Callable<Void> {
T result;
void setResult (T result) {
this.result = result;
}
public abstract Void call ();
}
Определите метод, который должен вызывать обратный вызов:
public void iWillFireTheCallback (Callback callback) {
// You could also specify the signature like so:
// Callback<Type of result> callback
// make some information ("the result")
// available to the callback function:
callback.setResult("Some result");
// fire the callback:
callback.call();
}
В том месте, куда вы хотите позвонить iWillFireTheCallback
:
Определить функцию обратного вызова (даже возможно внутри методов):
class MyCallback extends Callback {
@Override
public Void call () {
// this is the actual callback function
// the result variable is available right away:
Log.d("Callback", "The result is: " + result);
return null;
}
}
А затем позвонить iWillFireTheCallback
при передаче обратного вызова:
iWillFireTheCallback(new MyCallback());