J'utilise une bibliothèque tierce pour me connecter à un serveur via un protocole asynchrone et recevoir une réponse. Par exemple méthode pour obtenir userid par nom d'utilisateur ressemble à ceci:Besoin d'aide pour les rappels et les classes anonymes en Java
public int getUserid(String username) {
int userid = 0;
connection.call("getUserid", new Responder() {
public void onResult(final int result) {
System.out.println("userid: " + result);
//how to assign received value to userid and return it?
}
}, username);
//wait for response
while (userid == 0) {
try{
Thread.sleep(100);
} catch (Exception e) {}
}
return userid;
}
Le problème est que je ne peux pas assignons retourné « résultat » de la réponse du serveur à la variable « userid » de la méthode (afin de le retourner après) . Comment résoudre ceci? Je peux probablement l'assigner à une variable de classe plutôt qu'à une variable de méthode, mais je veux la garder dans la portée de la méthode afin de ne pas avoir à traiter de problèmes de concurrence.
Merci.
Merci. Il doit être appelé plus d'une fois si ... Quel modèle de syncronisation voulez-vous dire, lire/écrire à partir de cet objet ValueBox? Cela va être assez compliqué ... – serg
Le problème est que vous pouvez avoir plusieurs appels à getUserId avant de pouvoir traiter l'userId (par exemple, imaginez que vous ayez 5 appels dans les 100 premiers). Vous auriez alors le risque de faire écraser les choses, etc. Que voulez-vous faire dans ces situations? – Uri
Il est probable que vous ne traitiez pas d'autres demandes tant que l'une n'est pas terminée. – serg