2010-06-07 5 views
0

Je suis en train de faire une bibliothèque d'API pour nos services Web, et je me demande s'il est possible de faire quelque chose comme ceci:Passage d'arguments aux classes internes anonymes

abstract class UserRequest(val userId: Int) { 
    def success(message: String) 
    def error(error: ApiError) 
} 

api.invokeRequest(new UserRequest(121) { 
    override def success(message: String) = { 
    // handle success 
    } 

    override def error(error: ApiError) = { 
    // handle the error 
    } 
} 

Je parle de passage paramètres à la classe interne anonyme, et outrepassant les deux méthodes.

Je suis extrêmement nouveau à Scala, et je me rends compte que ma syntaxe pourrait être complètement fausse. J'essaie juste de trouver un bon design pour cette bibliothèque avant de commencer à la coder.

Je suis prêt à prendre des suggestions à ce sujet, si je le fais de manière complètement incorrecte, ou s'il y a un meilleur moyen. L'idée est que l'API va prendre une sorte d'objet de requête, l'utiliser pour faire une requête dans un thread via http, et quand la réponse a été faite, renvoyer d'une manière ou d'une autre à l'appelant si la requête a été réussie ou une erreur. Les fonctions de requête/erreur doivent être exécutées sur le thread principal.

Répondre

3

Est-ce que ce qui suit ressemble à ce que vous voulez?


scala> abstract class UserRequest(val userId: Int) { 
     def success(message: String) 
     def error(error: String) 
     } 

scala> trait Api {def invokeRequest(r: UserRequest): Unit} 

api: java.lang.Object with Api = [email protected] 

scala> val api = new Api { 
     def invokeRequest(r: UserRequest) = { 
      //some request handling here...., always successful in our case 
      if (true) r.success("succeeded") else r.error("failed") 
     } 
     } 


scala> api.invokeRequest(new UserRequest(121) { 
      def success(message: String) = println("user request 121 got success: " + message) 

      def error(error: String) = println("user 121 request got error: " + error) 
}) 
user request 121 got success: succeeded 
Questions connexes