Définissez une interface de rappel (si elle n'est pas déjà disponible) et faites en sorte que votre méthode prenne l'interface en tant que paramètre. La méthode va partir et faire son travail, et quand c'est fini, elle appelle le callback.
Exemple:
int synchronousMethod(int arg0, String arg1) {
int result = doStuff();
return result;
}
devient
void asynchronousMethod(int arg0, String arg1, Callback callback) {
try {
int result = doStuff();
} catch (Throwable t) {
callback.onFailure(t);
return;
}
callback.onSuccess(result);
}
où Callback
est quelque chose comme
interface Callback {
onSuccess(int result);
onFailure(Throwable t);
}
Il est préférable d'utiliser des types génériques pour le résultat Callback
(GWT, par exemple, des utilisations un AsyncCallback<ResultType>
générique qui est identique à la i nterface ci-dessus), mais puisque les génériques ne sont pas disponibles en version 1.4, vous pouvez soit utiliser Object
et lancer ou avoir différentes interfaces Callback
pour différents retours. Comparez avec l'une des interfaces *Listener
dans Swing/AWT.
Pourriez-vous élaborer un peu plus, je suis nouveau sur le sujet du sujet et je perds beaucoup. Le code que je veux devenir à async est comme ça: pour (.....) ... ... methodIWantConvert (String, String, Object); ... ... End-for; La méthode que je veux transformer est une méthode séquentielle assez normale. Merci un million. – Myolnir
Comprendre. La seule question que j'ai est que ma méthode synchrone ne renvoie rien, est vide, pourrait faire ce qui suit? Interface publique Callback { void onSuccess(); void onFailure (Throwable t); } public void asynchronousMethod (mode String, alias String, OwnBean ownBean, rappel Callback) OwnException lancers francs {{ essayer syncMethod (mode, alias, ownBean); } Catch (Exception e) { callback.onFailure (e); retour; } callback.onSuccess(); } – Myolnir
Droite. Si c'est «void», alors vous avez une liste vide de paramètres 'onSuccess'. – chrylis