2013-08-21 8 views

Répondre

1

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); 
} 

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.

+0

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

+0

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

+0

Droite. Si c'est «void», alors vous avez une liste vide de paramètres 'onSuccess'. – chrylis

Questions connexes