Javaでは、メソッドをパラメーターとして渡すことはできませんが、祖先を拡張または実装し、そのメソッドをオーバーライドするオブジェクトを渡すことはできます。コマンドパターンはこの概念を使用します(http://en.wikipedia.org/wiki/Command_pattern)。
このアプローチのアイデアは次のとおりです。
private static interface Command {
public void execute();
}
public static final class MyWsCommand1 implements Command {
@Override
public void execute() {
// TODO your WS code 1
}
}
public static final class MyWsCommand2 implements Command {
@Override
public void execute() {
// TODO your WS code 2
}
}
private static class GenericAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
private Command command;
public GenericAsyncTask(Command command) {
super();
this.command = command;
}
@Override
protected Result doInBackground(Params... params) {
// TODO your code
command.execute();
// TODO your code
return null;
}
}
private GenericAsyncTask<Object, Object, Object> myAsyncTask1;
private GenericAsyncTask<Object, Object, Object> myAsyncTask2;
そして、それらをコードで使用します。
myAsyncTask1 = new GenericAsyncTask<Object, Object, Object>(new MyWsCommand1());
myAsyncTask1.execute();
..。
myAsyncTask2 = new GenericAsyncTask<Object, Object, Object>(new MyWsCommand2());
myAsyncTask2.execute();